c# – Nullable.GetHashCode()是一个糟糕的哈希码函数吗?
发布时间:2020-12-15 07:59:47 所属栏目:百科 来源:网络整理
导读:Nullable T .GetHashCode()的实现如下: public override int GetHashCode(){ if (!this.HasValue) { return 0; } return this.value.GetHashCode();} 但是,如果基础值也生成哈希码0(例如,bool设置为false或int32设置为0),那么我们有两个通常出现的具有相同
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.掌握这一点将是困难的,祝你好运. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |