如何在C#中将UIntPtr对象转换为IntPtr?

我需要在我的C#.NET 2.0应用程序中将UIntPtr对象转换为IntPtr对象。 如何实现这一目标? 我不认为它就像这样简单:

 UIntPtr _myUIntPtr = /* Some initializer value. */ object _myObject = (object)_myUIntPtr; IntPtr _myIntPtr = (IntPtr)_myObject; 

这应该适用于x86和x64

 IntPtr intPtr = unchecked((IntPtr)(long)(ulong)uintPtr); 

这应该适用于32位操作系统:

 IntPtr intPtr = (IntPtr)(int)(uint)uintPtr; 

也就是说,将UIntPtr转换为uint,将其转换为int,然后将其转换为IntPtr。

优点是抖动会优化所有转换,并简单地将其转换为将一个值直接分配给另一个,但我实际上没有测试过。

有关适用于64位操作系统的解决方案,请参阅Jared的答案。

 UIntPtr _myUIntPtr = / *一些初始化值。  * / 
 void * ptr = _myUIntPtr.ToPointer();
 IntPtr _myIntPtr = new IntPtr(ptr);