首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当Equals方法被覆盖时,为什么覆盖GetHashCode很重要?

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

Stack Overflow用户
提问于 2008-12-16 21:41:18
回答 15查看 417.1K关注 0票数 1.6K

给定以下类

代码语言:javascript
运行
复制
public class Foo
{
    public int FooId { get; set; }
    public string FooName { get; set; }

    public override bool Equals(object obj)
    {
        Foo fooItem = obj as Foo;

        if (fooItem == null) 
        {
           return false;
        }

        return fooItem.FooId == this.FooId;
    }

    public override int GetHashCode()
    {
        // Which is preferred?

        return base.GetHashCode();

        //return this.FooId.GetHashCode();
    }
}

我重写了Equals方法,因为Foo表示Foo表的一行。哪种方法是覆盖GetHashCode的首选方法

为什么覆盖GetHashCode很重要

EN

Stack Overflow用户

发布于 2020-05-11 20:52:37

对于.NET 4.7,覆盖GetHashCode()的首选方法如下所示。如果目标是较旧的.NET版本,请包括System.ValueTuple nuget包。

代码语言:javascript
运行
复制
// C# 7.0+
public override int GetHashCode() => (FooId, FooName).GetHashCode();

在性能方面,该方法将优于大多数复合散列代码实现。ValueTuple是一个struct,所以不会有任何垃圾,并且底层算法是最快的。

票数 14
EN
查看全部 15 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/371328

复制
相关文章

相似问题

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