这应该很简单:我看到所有人都使用IntPtr
,有什么理由我应该使用UIntPtr
吗?
答案 0 :(得分:8)
似乎没有充分的理由。来自文档:
<强>说明强>
...
IntPtr类型符合CLS标准, 虽然UIntPtr类型不是。的 仅 IntPtr类型用于常见的 语言运行时 。 UIntPtr类型是 提供主要是为了维护 与IntPtr建筑对称 类型。
答案 1 :(得分:7)
好according to Microsoft UIntPtr
主要用于建筑对称。另一个有趣的观点是UIntPtr
不符合CLS。
从表面上看,IntPtr似乎是首选。但是,如果你知道你将进行指针运算,那么UIntPtr可能是一个更好的选择,因为在关闭机会时会出现一些处理负值的模糊问题。
答案 2 :(得分:1)
存在很大差异。例如,在32位应用程序上,新UIntPtr(0xC01E0001)
导致指针位于3223191553,但IntPtr(0xC01E0001)
导致System.OverflowException:&#34;算术运算导致溢出&#34;。也就是说,因为0xC01E0001大于Int32的MaxValue。
因此,如果仍然需要这样的指针,则需要将负整数用作IntPtr的内部值,例如
unchecked((IntPtr)(int)0xC01E0001)
回答你的问题:对于大于Int32.MaxValue的值,使用UIntPtr更容易,也更简洁。它可能总是最好的解决方案,因为指针总是被认为是无符号的。