这应该很简单:我看到到处都有人在使用IntPtr,有什么理由我应该使用UIntPtr吗?
发布于 2009-08-24 03:04:00
似乎没有很好的理由这样做。从文档中:
备注
..。
IntPtr类型与CLS兼容,而UIntPtr类型不兼容。在公共语言运行库中仅使用IntPtr类型。提供UIntPtr类型主要是为了维护与IntPtr类型的体系结构对称性。
发布于 2009-08-24 03:16:01
according to Microsoft UIntPtr主要是为了架构对称性而提供的。另一个有趣的地方是UIntPtr不兼容CLS。
从表面上看,IntPtr似乎是首选。然而,如果你知道你要进行指针运算,那么UIntPtr可能是一个更好的选择,因为在极小的机会中,有一些处理负值的模糊问题。
发布于 2014-08-31 01:15:26
这有很大的不同..例如,在32位应用程序上,新的UIntPtr(0xC01E0001)会产生一个3223191553的指针,而IntPtr(0xC01E0001)会产生一个System.OverflowException:“算术运算导致溢出”。这是因为0xC01E0001大于Int32的MaxValue。
因此,如果仍然需要这样的指针,则需要使用负整数作为IntPtr的内部值,例如
unchecked((IntPtr)(int)0xC01E0001)回答你的问题:对于大于Int32.MaxValue的值,使用UIntPtr更容易,也更干净。这可能是最好的解决方案,因为指针总是被认为是无符号的。
https://stackoverflow.com/questions/1320296
复制相似问题