Nullable< T> .GetHashCode()的实现如下:
public override int GetHashCode() { if (!this.HasValue) { return 0; } return this.value.GetHashCode(); }
但是,如果基础值也生成哈希码0(例如,bool设置为false或int32设置为0),那么我们有两个通常出现的具有相同哈希码的不同对象状态.在我看来,更好的实现将是类似的.
public override int GetHashCode() { if (!this.HasValue) { return 0xD523648A; // E.g. some arbitrary 32 bit int with a good mix of set and // unset bits (also probably a prime number). } return this.value.GetHashCode(); }
解决方法
是的,你有一个观点.如果您事先知道要存储的数据,则始终可以编写更好的GetHashCode()实现.并不是图书馆作家所拥有的奢侈品.但是,是的,如果你有很多布尔?无论是假的还是!HasValue然后默认的实现会受到伤害.枚举和整数相同,零是一个常见值.
然而,你的论点是学术性的,改变实施成本减去一万分,你不能自己做.你能做的最好的就是提交建议,正确的渠道是user-voice site.掌握这一点将是困难的,祝你好运.