为什么不能比较IntPtr.Zero和默认(IntPtr)?

时间:2012-06-06 14:01:35

标签: c# .net default 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

1 个答案:

答案 0 :(得分:2)

适用于VS 2010,VS 2008,VS 2005 SP1,Mono 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());