[英]IntPtr vs UIntPtr
這應該很簡單:我看到每個人都使用IntPtr
,有什么理由我應該使用UIntPtr
嗎?
似乎沒有充分的理由。 來自文檔:
備注
...
IntPtr類型符合CLS,而UIntPtr類型則不符合。 在公共語言運行庫中僅使用IntPtr類型 。 提供UIntPtr類型主要是為了保持IntPtr類型的架構對稱性。
根據Microsoft UIntPtr
提供的主要是建築對稱性。 另一個有趣的觀點是UIntPtr
不符合CLS。
從表面上看,IntPtr似乎是首選。 但是,如果你知道你將使用指針算法,那么UIntPtr可能是一個更好的選擇,因為在關閉機會時,有一些模糊的問題處理負值。
有一個很大的區別..例如,在32位應用程序上,新的UIntPtr(0xC01E0001)
導致指針位於3223191553,但IntPtr(0xC01E0001)
導致System.OverflowException:“算術運算導致溢出”。 也就是說,因為0xC01E0001大於Int32的MaxValue。
因此,如果仍然需要這樣的指針,則需要將負整數用作IntPtr的內部值,例如
unchecked((IntPtr)(int)0xC01E0001)
回答你的問題:對於大於Int32.MaxValue的值,使用UIntPtr更容易,也更簡潔。 它可能總是最好的解決方案,因為指針總是被認為是無符號的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.