문제

C #에는 두 가지 이상한 연산자가 있습니다.

  • 진정한 연산자
  • 거짓 연산자

    이 권한을 이해하면 부울 표현식 대신 사용하려는 유형과 bool에 대한 암시 적 변환을 제공하지 않으려는 유형에서 이러한 연산자를 사용할 수 있습니다.

    다음 수업이 있다고 가정 해 보겠습니다. 라코 디스

    그래서 다음 코드를 작성할 수 있습니다. 라코 디스

    그러나 위의 모든 예에서 실제 연산자 만 실행됩니다. 그렇다면 C #의 거짓 연산자는 무엇에 좋은가요?

    참고 : 더 많은 예는 여기 , 여기 여기 .

도움이 되었습니까?

해결책

이를 사용하여 &&|| 연산자를 재정의 할 수 있습니다.

&&|| 연산자는 재정의 할 수 없지만 |, &, truefalse를 정확히 올바른 방식으로 재정의하면 |&를 작성할 때 컴파일러가 ||&&를 호출합니다.

예를 들어,이 코드를보십시오 ( http : // ayende.com / blog / 1574 / nhibernate-criteria-api-operator-overloading -이 트릭에 대해 알아 낸 곳; 보관 된 버전 @BiggsTRC) : 라코 디스

이것은 명백히 부작용이며 의도 된 방식은 아니지만 유용합니다.

다른 팁

Shog9 및 Nir : 귀하의 답변에 감사드립니다.그 대답은 저를 Steve Eichert 기사 로 안내했고 msdn : <인용구>

연산 x && y는 T.false (x)?x : T. & (x, y), 여기서 T.false (x)는 T에서 선언 된 false 연산자의 호출이고 T. & (x, y)는 선택된 연산자 &의 호출입니다.즉, x가 먼저 평가되고 결과에 대해 연산자 false가 호출되어 x가 확실히 거짓인지 확인합니다.그런 다음 x가 확실히 거짓이면 연산 결과는 이전에 x에 대해 계산 된 값입니다.그렇지 않으면 y가 평가되고 선택된 연산자 &가 x에 대해 이전에 계산 된 값과 y에 대해 계산 된 값에서 호출되어 연산 결과를 생성합니다.

http://msdn.microsoft.com/en에 링크하는 페이지-us / library / 6x6y6z4d.aspx 는 nullable 값 유형이 도입되기 전에 nullable bool을 처리하는 방법 인 용도를 나타냅니다.

요즘에는 그것들이 ArrayList와 같은 종류의 일에 좋다고 생각합니다. 즉, 전혀 아무것도 아닙니다.

AFAIK는 && 연산자가 작동 할 때와 같은 거짓 테스트에 사용됩니다.&& 단락을 기억하십시오. 따라서 표현식에서 라코 디스

mFalse.false()가 호출되고 true를 반환하면 표현식이 'mFalse.true ()'에 대한 호출로 축소됩니다 (그러면 false를 반환해야합니다. 그렇지 않으면 상황이 이상해집니다).

&mFalse.false()를 반환하는 경우 사용되기 때문에 해당 표현식을 컴파일하려면 false 연산자를 구현해야합니다.

링크 한 MSDN 문서에서 Nullable (i.e. int ?, bool? 등) 형식이 C # 2의 언어로 도입되기 전에 nullable 부울 형식을 허용하도록 제공되었습니다. 따라서 값이 true인지 false인지 또는 null인지를 나타내는 내부 값을 저장합니다. 즉, 예에서 true의 경우> 0, false의 경우 <0, null의 경우== 0이면 SQL 스타일의 null 의미 체계를 얻을 수 있습니다. nullity를 명시 적으로 확인할 수 있도록 .IsNull 메서드 또는 속성을 구현해야합니다.

SQL과 비교하여 Foo 값이 true로 설정된 행 3 개, Foo 값이 false로 설정된 행 3 개, Foo 값이 null로 설정된 행 3 개가있는 테이블 테이블을 상상해보십시오. 라코 디스

모든 행을 계산하려면 다음을 수행해야합니다 .- 라코 디스

이 'IS NULL'구문은 클래스에서 .IsNull ()과 동등한 코드를 갖습니다.

LINQ는 C #과의 비교를 더욱 명확하게합니다 .- 라코 디스

MyTypeEnumberable이 데이터베이스의 정확히 동일한 내용을 가지고 있다고 상상해보십시오. 즉, 3 개의 값은 true, 3 개의 값은 false, 3 개의 값은 null입니다. 이 경우 totalCount는이 경우 6으로 평가됩니다. 그러나 코드를 다음과 같이 다시 작성하면 :- 라코 디스

그러면 totalCount는 9로 평가됩니다.

링크 된 MSDN 기사에서 거짓 연산자에 대한 DBNull 예제는 BCL의 클래스가이 정확한 동작을 보여줍니다.

사실상 결론은 이러한 유형의 동작을 원한다고 확신하지 않는 한 이것을 사용해서는 안된다는 것입니다. 훨씬 단순한 nullable 구문을 사용하는 것이 좋습니다 !!

업데이트 : 방금 논리 연산자를 수동으로 재정의해야합니다!, || 및 &&를 사용하여 제대로 작동하도록합니다. 나는 거짓 연산자가 이러한 논리 연산자, 즉 진실, 거짓 또는 '그 외'를 나타내는 것으로 간주한다고 믿습니다. 다른 주석에서 언급했듯이! x는 방망이에서 작동하지 않습니다. 당신은 과부하해야!. 이상 함!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top