int
을 사용하고
, 그러나 이것은 컴파일러의 예외를 던질 것입니다 다음 닷넷 (1)에서 닷넷.Net 2+ : 왜 (1 == null)이 더 이상 컴파일러 예외를 throw하지 않습니다?
의 모든 값 유형에을 적용 이제
int i = SomeFunctionThatReturnsInt();
if(i == null) //compiler exception here
을 (닷넷 2 또는 3.5) 예외가 사라졌습니다. 이 이유
내가 알고
int? j = null; //nullable int
if(i == j) //this shouldn't throw an exception
문제는 int?
이 널 (NULL) 입력 가능하고 int
때문에 지금 int?
에 대한 암시 적 캐스트를 가지고 있다는 것입니다. 위 구문은 컴파일러 마술입니다. 정말 우리가하고있는 우리가 i == null
을 수행 할 때
Nullable<int> j = null; //nullable int
//compiler is smart enough to do this
if((Nullable<int>) i == j)
//and not this
if(i == (int) j)
을 그래서 지금, 우리가 얻을 : C#을 어쨌든이를 계산하는 이유가 충분히 영리하지 않을 수 컴파일러 로직을하고있다
if((Nullable<int>) i == null)
주어진 null
과 같은 절대 값을 처리 할 때 그러지 않습니까?
컴파일러는 정확히 1 == 2 일 때와 똑같이 사실이 아님을 정확히 나타냅니다. int가 암시 적으로 int로 캐스팅 될 수 있다는 것을 알면 충분히 똑똑합니까? 그 int? null와 비교할 수 있습니다. 최적화 도구가 전체 블록을 제거 할만큼 똑똑하다고 생각합니다. – Keith