我想听听社区关于如何为我的对象实现GetHashCode(或覆盖它)的消息。我理解如果我覆盖equals方法,我需要这样做。我已经实现了相当多的次数,有时只是调用基本方法。我知道如果对象包含相同的细节(成员),我的对象应该等于对象的另一个实例。从班级成员那里获取哈希码的最佳方法是什么?
答案 0 :(得分:45)
假设您的课程如下:
class Frob {
public string Foo { get; set; }
public int Bar { get; set; }
public double FooBar { get; set; }
}
假设您定义了等号,以便Frob
的两个实例相等,如果Foo
和Bar
相等,但FooBar
无关紧要。
然后,您应该根据GetHashCode
和Foo
来定义Bar
。一种方式是这样的:
return this.Foo.GetHashCode() * 17 + this.Bar.GetHashCode();
基本上,您只想合并定义相等性的所有字段。一种方法是像我一样继续累积和乘以17。它速度快,简单,正确,通常可以很好地分发。