一貫したオブジェクトの比較
については、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
をオーバーライドする場合は、コードの読みやすさと保守性を向上させるために、カスタム平等演算子(
)を追加することを検討してください。
以上が「等しい」をオーバーライドするときに、なぜ「gethashcode」をオーバーライドする必要があるのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。