为什么 IntPtr 没有实现 IEquatable<IntPtr>?
Why does IntPtr not implement IEquatable<IntPtr>?
我在我的应用程序中发现了相当多的垃圾收集器停顿,所以我对其进行了分析,发现我的一个方法产生了大量垃圾,除了这个之外什么也没做:
return Address.Equals(other.Address)
其中 Address
是一个 IntPtr
。
事实证明 IntPtr
不像大多数值类型那样实现 IEquatable<T>
,因此我每次都装箱 other.Address
。
IntPtr
没有实现该接口有什么充分的理由,或者这是一个疏忽?
这是一个疏忽。 IEquatable<T>
是在 IntPtr
存在后添加到 .NET 2.0 中的。 BCL 中有一些地方没有正确升级,似乎没有人有兴趣修复它们。
只需使用==
。无论如何,它是更好的风格,因为它清楚地表明了你的意图。
我在我的应用程序中发现了相当多的垃圾收集器停顿,所以我对其进行了分析,发现我的一个方法产生了大量垃圾,除了这个之外什么也没做:
return Address.Equals(other.Address)
其中 Address
是一个 IntPtr
。
事实证明 IntPtr
不像大多数值类型那样实现 IEquatable<T>
,因此我每次都装箱 other.Address
。
IntPtr
没有实现该接口有什么充分的理由,或者这是一个疏忽?
这是一个疏忽。 IEquatable<T>
是在 IntPtr
存在后添加到 .NET 2.0 中的。 BCL 中有一些地方没有正确升级,似乎没有人有兴趣修复它们。
只需使用==
。无论如何,它是更好的风格,因为它清楚地表明了你的意图。