c# - 为什么无法比较 IntPtr.Zero 和 default(IntPtr)?

标签 c# .net default intptr

我刚刚了解到 IntPtr.Zero 无法与 default(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

最佳答案

适用于 VS 2010、VS 2008、VS 2005 SP1、Mono 1.2.6 中的编译代码。仅在 Visual Studio 2005 的监 window 口 中设法重现这两个问题(我尝试使用 VS 2005 SP1),编译后的代码按预期工作。 (这两个问题我的意思是问题 1:“无法计算表达式”,问题 2:“枚举值超出合法范围”。)因此,正如一些评论作者所指出的,它是一个 VS 2005 监 window 口你偶然发现的错误。很难快速找到相关错误报告的链接...

否则在这种情况下,我会从反射开始,看看您尝试比较哪些类型(将 Console.Out 替换为您有权访问的任何有意义的流):

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

关于c# - 为什么无法比较 IntPtr.Zero 和 default(IntPtr)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915780/

相关文章:

javascript - 在没有库的情况下,用 JavaScript 中另一个对象的属性替换对象的属性

c# - 同时运行存储过程多次

c# - 使用 MS Access 插入语句 C#

javascript - 从 Google 帐户中提取电子邮件地址

c# - 使用 Entity + LINQ 如何不只是本质上对我的查询进行硬编码?

c++ - 我应该在工作的 C++ 代码中的什么地方引入默认构造函数,为什么?

c# - 如何在我的解决方案中使用来自其他项目的 Web Api 项目?

.net - Database.SetInitializer 来自静态构造函数

c# - 从 XML 网络流中读取整个元素

c++ - 在 C++ 中显式声明默认方法