【问题标题】:C# Can I check if an IntPtr is null?C# 我可以检查 IntPtr 是否为空吗?
【发布时间】:2014-11-14 06:05:48
【问题描述】:

我的 C# 类中有一个 IntPtr 字段。
它包含对 C++ 库中对象的引用。

protected IntPtr ThingPtr;

在某个阶段我可能会也可能不会初始化它。

ThingPtr = FunctionInMyCplusplusLibrary();

我想知道在这种情况下检查它是否为 null 是否有意义(检查它是否已被初始化)

if(ThingPtr == null)
{
    //Do stuff
}

【问题讨论】:

  • 从不。曾经。假设要初始化任何东西。所以是的,它确实很有意义!
  • IntPtr 永远不能是 null。请改用ThingPtr == IntPtr.Zero。
  • 不完全是重复的,但这是您应该阅读的答案stackoverflow.com/questions/1456861/…
  • 结构是值类型,不能为空,对象是引用类型,可以为空。

标签: c# null intptr


【解决方案1】:

您可以将 IntPtr.Zero 用于 null,但它不等同于 C# null 值。

【讨论】:

    【解决方案2】:

    IntPtr 是一个结构,它永远不能为 null,您的库可能会返回 null 的等价物,但我希望它为零。

    【讨论】:

      【解决方案3】:

      IntPtr是值类型,不能为null。

      你要检查它的值是否为(地址)0:

      if (ThingPtr == IntPtr.Zero)
      

      【讨论】:

      • 另一种方法是 default(IntPtr),我怀疑它等同于 IntPtr.Zero。如果要为参数指定默认值,IntPtr.Zero 将不起作用,但可以指定 default(IntPtr),例如 void TestMethod ( IntPtr p = default(IntPtr) )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2013-01-10
      • 2010-11-01
      • 1970-01-01
      • 2011-05-03
      相关资源
      最近更新 更多