首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只覆盖GetHashCode而返回base.GetHashCode会不好吗?

只覆盖GetHashCode而返回base.GetHashCode会不好吗?
EN

Stack Overflow用户
提问于 2015-06-07 23:59:21
回答 2查看 1.3K关注 0票数 0

我过多地删除了相等方法和相等操作符,Resharper发出警告说我也应该重写GetHashCode。所以我就这么做了。我刚做了这个:

代码语言:javascript
复制
    public override int GetHashCode()
    {
        return base.GetHashCode();
    }

但现在它又给了我一个警告: GetHashCode打电话给base.GetHashCode。所以,我要变坏了吗?为什么Resharper会发出这样的警告?我应该创建我自己的GetHashCode实现吗?事实上,我在想为什么我会费心去推翻它。

EN

回答 2

Stack Overflow用户

发布于 2015-06-08 00:03:47

两个相同的对象应该具有相同的哈希代码。否则,哈希代码就毫无意义,毫无价值。这就是为什么Resharper警告你。(相反的关系不是真,因为不同的对象可能有不同的哈希代码。)

基本实现根据对象的句柄返回一个值,并且很可能为相等(通过Equals定义)对象返回一个不同的值。如果您不使用它,这不是问题,但是DictionaryHashSet使用它。如果您不正确地实现GetHashCode,它们将严重崩溃。

票数 3
EN

Stack Overflow用户

发布于 2015-06-08 00:04:35

如果要将项用作DictionaryHashSet等中的键,则必须重写该项,因为它用于将项分组到桶中。否则,你可以避免这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30699692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档