从 FW 4.0 开始,该IntPtr
结构具有以下Add
方法:
public static IntPtr Add(
IntPtr pointer,
int offset
)
太好了,因为它应该解决IntPtr
我们遇到的所有数学问题(1、2,可能更多)。
但为什么是offset
int
?
一定不是IntPtr
吗?我可以很容易地想象将 64 位指针偏移一个超出int
范围的值。
例如,考虑Marshal.OffsetOf
:
public static IntPtr OffsetOf(
Type t,
string fieldName
)
它返回一个IntPtr
作为结构成员的偏移量。这很有意义!并且您不能轻松地将此偏移量与新Add
方法一起使用。您必须将其转换为Int64
,然后Add
在循环中多次调用。
此外,它似乎扼杀了IntPtr.Size
与正确编写的应用程序无关的想法。您必须将偏移量转换为特定类型,例如Int64
,此时您必须开始管理大小差异。想象一下当 128 位IntPtr
出现时会发生什么。
我的问题是,为什么?
我的结论是正确的,还是我错过了重点?