覆盖GetHashCode
和Equals
用于一致的对象比较
>方法比较类的对象时,也必须覆盖Equals
>方法。当您的对象用作基于哈希的集合(例如词典或哈希集)中的键时,这一点尤其重要。GetHashCode
:Foo
>
<code class="language-csharp">public override bool Equals(object obj) { // ... comparison logic based on FooId ... }</code>
属性的对象进行自定义,则默认Equals
(从Foo
继承)仍将基于对象的内存地址生成哈希码。 当将FooId
对象用作哈希表中的键时,这种不一致会导致不可预测的行为。GetHashCode
Object
>Foo
为什么一致的哈希重要
覆盖至关重要:
>
GetHashCode
Equals
GetHashCode
Equals
>实现
GetHashCode
实现应与方法的逻辑一致:
GetHashCode
均等对象必须具有相同的哈希代码。Equals
>
Equals
Foo
这将基于GetHashCode
>生成哈希码,镜像
<code class="language-csharp">public override int GetHashCode() { return this.FooId.GetHashCode(); }</code>
使用自定义比较来增强清晰度FooId
Equals
>
和时,请考虑添加自定义平等运算符(和
)以提高代码可读性和可维护性。以上是为什么在覆盖`equals'时必须覆盖``gethashcode''?的详细内容。更多信息请关注PHP中文网其他相关文章!