2012-06-06 1 views
6

방금 ​​IntPtr.Zero를 기본값 (IntPtr)과 비교할 수없는 어려운 방법을 배웠습니다. 누군가 왜 저에게 말할 수 있습니까?IntPtr.Zero와 기본값 (IntPtr)을 비교할 수없는 이유는 무엇입니까?

IntPtr.Zero == new IntPtr(0) -> "could not evaluate expression" 
IntPtr.Zero == default(IntPtr) --> "could not evaluate expression" 
IntPtr.Zero == (IntPtr)0 -> "could not evaluate expression" 

IntPtr.Zero.Equals(IntPtr.Zero) --> "Enum value was out of legal range" exception 
IntPtr.Zero.Equals(default(IntPtr)) --> "Enum value was out of legal range" exception 

IntPtr.Zero == IntPtr.Zero --> true 
new IntPtr(0) == new IntPtr(0) --> true 
+0

비교해도 좋고 동일합니다. 'var isEqual = IntPtr.Zero == new IntPtr (0);'이고 isEqual은 true입니다. – vcsjones

+2

저에게 맞습니다. 어떤 플랫폼을 사용하고 있으며 어떤 프레임 워크 버전입니까? – Botz3000

+0

http://ideone.com/BJqvB'IntPtr.Zero == default (IntPtr)'는 true를 출력합니다. 이것은 어떤 맥락인가? –

답변

2

나를 위해 VS 2010, VS 2008, VS 2005 SP1, 모노 1.2.6의 컴파일 된 코드로 작동합니다. Visual Studio 2005의 시계 창 (VS 2005 SP1을 사용하여 시도 함)의 조사 식 창에서 두 가지 문제를 모두 재현하기 위해 컴파일 된 코드가 예상대로 작동합니다. (문제 1 : "표현식을 평가할 수 없습니다", 문제 2 : "열거 형 값이 유효 범위를 벗어났습니다.") 따라서 일부 작성자가 지적한 것처럼 VS 2005 조사 기간입니다 당신이 우연히 만난 버그. 관련 버그 보고서에 대한 링크를 빠르게 찾을 수 있습니다 ...

그런 경우에는 반향에서 시작하여 비교하려는 유형을 확인하십시오 (Console.Out을 의미있는 스트림으로 대체하십시오. 액세스 할 수) :

Console.WriteLine("new IntPtr(0) type is: " + new IntPtr(0).GetType()); 
Console.WriteLine("IntPtr.Zero type is: " + IntPtr.Zero.GetType()); 
관련 문제