栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当覆盖Equals方法时,覆盖GetHashCode为什么很重要?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当覆盖Equals方法时,覆盖GetHashCode为什么很重要?

是的,将您的项目用作字典或

HashSet<T>
等等中的键非常重要-
因为它用于(在没有custom的情况下
IEqualityComparer<T>
)将项目分组到存储桶中。如果两个项目的哈希码不匹配,则可能 永远不会
认为它们相等(永远不会调用等于)。

所述的GetHashCode()方法应该反映

Equals
逻辑;
规则是:

  • 如果两个事物相等(
    Equals(...) == true
    ),则它们 必须 返回相同的值
    GetHashCode()
  • 如果
    GetHashCode()
    是相等的,它是 必要对他们是相同的; 这是一次碰撞,
    Equals
    将调用它来查看它是否是真正的相等性。

在这种情况下,看起来“

returnFooId;
”是合适的
GetHashCode()
实现。如果您要测试多个属性,通常使用如下代码将它们组合在一起,以减少对角线冲突(即,
newFoo(3,5)
与的哈希码不同
new Foo(5,3)
):

unchecked // only needed if you're compiling with arithmetic checks enabled{ // (the default compiler behaviour is *disabled*, so most folks won't need this)    int hash = 13;    hash = (hash * 7) + field1.GetHashCode();    hash = (hash * 7) + field2.GetHashCode();    ...    return hash;}

哦,为方便起见,在覆盖和时,您也可以考虑提供

==
!=
运算符。
Equals``GetHashCode


当你得到这个错误会发生什么情况的演示是在这里。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号