加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.掌握这一点将是困难的,祝你好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读