正确实现GetHashCode
我想从社区听到我应该如何去实现GetHashCode(或覆盖它)为我的对象。 我知道我需要这样做,如果我重写equals方法。 我已经实现了相当多的时间,有时只是调用基本方法。 我明白,如果对象包含相同的细节(成员),我的对象应该等于该对象的另一个实例。 从类的成员获取哈希代码的最好方法是什么?
假设你的课堂是这样的:
class Frob { public string Foo { get; set; } public int Bar { get; set; } public double FooBar { get; set; } }
假设你定义了等于,如果他们的Foo
和他们的Bar
是相等的, FooBar
两个实例是相等的,但是FooBar
并不重要。
那么你应该用Foo
和Bar
来定义GetHashCode
。 一种方式是这样的:
return this.Foo.GetHashCode() * 17 + this.Bar.GetHashCode();
基本上,你只是想要纳入所有定义平等的领域。 一种方法就是像我一样继续积累和增加17。 它速度很快,很简单,它是正确的,它通常会给出一个很好的分布。