当前位置:  开发笔记 > 编程语言 > 正文

新的IntPtr(0)与IntPtr.Zero

如何解决《新的IntPtr(0)与IntPtr.Zero》经验,为你挑选了3个好方法。

这两个陈述之间有什么区别:

IntPtr myPtr = new IntPtr(0);
IntPtr myPtr2 = IntPtr.Zero;

我已经看到许多使用PInvoke的示例,如果myPtr参数由ref发送到被调用函数,则它更喜欢第一种语法.如果我在我的应用程序中用IntPtr.Zero替换所有新的IntPtr(0),它会造成任何损害吗?



1> Keith..:

IntPtr是一种值类型,因此与String.Empty静态属性相比,它的好处不大IntPtr.Zero

一旦你通过IntPtr.Zero任何地方你就会得到一份副本,所以对于变量初始化它没有任何区别:

IntPtr myPtr = new IntPtr(0);
IntPtr myPtr2 = IntPtr.Zero;

//using myPtr or myPtr2 makes no difference
//you can pass myPtr2 by ref, it's now a copy

有一个例外,那就是比较:

if( myPtr != new IntPtr(0) ) {
    //new pointer initialised to check
}

if( myPtr != IntPtr.Zero ) {
    //no new pointer needed
}

正如几张海报已经说过的那样.



2> Richard Szal..:

它们在功能上是等价的,因此它不会引起任何问题.

IntPtr.Zero代表结构的默认状态(它被声明,但不使用的构造),所以的默认值intptr (void*)null.然而,由于(void*)null(void*)0是等价的,IntPtr.Zero == new IntPtr(0)

编辑:虽然它们是等价的,但我建议IntPtr.Zero用于比较,因为它更容易阅读.



3> bruno conde..:

使用IntPtr.Zero将允许您避免新的实例IntPtr.

来自msdn:

使用此字段可以有效地确定IntPtr的实例是否已设置为零以外的值

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有