给定以下类
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很重要
发布于 2020-05-11 20:52:37
对于.NET 4.7,覆盖GetHashCode()的首选方法如下所示。如果目标是较旧的.NET版本,请包括System.ValueTuple nuget包。
// C# 7.0+
public override int GetHashCode() => (FooId, FooName).GetHashCode();在性能方面,该方法将优于大多数复合散列代码实现。ValueTuple是一个struct,所以不会有任何垃圾,并且底层算法是最快的。
https://stackoverflow.com/questions/371328
复制相似问题