ホームページ > バックエンド開発 > C++ > C# で効果的なオブジェクト比較のために Equals() と GetHashCode() を適切にオーバーライドする方法

C# で効果的なオブジェクト比較のために Equals() と GetHashCode() を適切にオーバーライドする方法

DDD
リリース: 2025-01-04 21:16:39
オリジナル
208 人が閲覧しました

How to Properly Override Equals() and GetHashCode() for Effective Object Comparison in C#?

効果的なオブジェクトの等価性を実現するための Equals() と GetHashCode() のオーバーライド

オブジェクトの等価性の追求では、Equals() と GetHashCode( ) メソッドは重要な役割を果たします。カスタム クラスの場合、これらのメソッドをオーバーライドして、意味のある比較およびハッシュ メカニズムを確立する必要があります。この記事では、RecommendationDTO クラスのコンテキストでこれらのメソッドを実装し、LINQ Except() メソッドとシームレスに統合できるようにするための正しいアプローチについて説明します。

Equals() のオーバーライド

  1. Nullable 型: 提供されたコードでは、 Equals() メソッドは null 参照をチェックします。ただし、DateTime? などの null 許容型の場合は、null 値を適切に処理するように比較を変更する必要があります。
  2. すべてのプロパティを考慮する: 等価比較では、ビジネス上の等価性を定義するすべての関連プロパティを考慮する必要があります。オブジェクト。この場合、ReferenceId のみが比較されますが、他の重要なプロパティも含める必要がある場合があります。

GetHashCode() のオーバーライド

  1. ハッシュ コードの計算: GetHashCode() メソッドは、プロパティに基づいてハッシュ コードを計算する必要があります。等価比較に使用されます。 ReferenceId は等価性のために使用されているため、ハッシュ コードの計算にも使用する必要があります。
  2. Consistent Hashing: ハッシュ コードは、同じオブジェクトに対する複数の呼び出しにわたって一貫している必要があります。これにより、同じプロパティを持つオブジェクトが常に同じハッシュ コードを持つようになり、効率的なハッシュ操作とルックアップ操作が可能になります。

サンプル実装

これは拡張機能です。 RecommendationDTO の Equals() メソッドと GetHashCode() メソッドの実装class:

public override bool Equals(object obj)
{
    var item = obj as RecommendationDTO;

    if (item == null || ReferenceId == Guid.Empty || item.ReferenceId == Guid.Empty)
    {
        return false;
    }

    return this.RecommendationId.Equals(item.RecommendationId);
}

public override int GetHashCode()
{
    if (ReferenceId == Guid.Empty)
    {
        throw new InvalidOperationException("ReferenceId cannot be Guid.Empty when calculating hash code.");
    }

    return this.RecommendationId.GetHashCode();
}
ログイン後にコピー

この方法で Equals() と GetHashCode() を実装することにより、RecommendationDTO クラスを LINQ Except() メソッドで効果的に使用できるようになり、同じ意味のあるプロパティを持つオブジェクトが確実に処理されるようになります。

以上がC# で効果的なオブジェクト比較のために Equals() と GetHashCode() を適切にオーバーライドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート