Heim > Backend-Entwicklung > C++ > Wie kann ich Equals() und GetHashCode() für einen effektiven Objektvergleich in C# ordnungsgemäß überschreiben?

Wie kann ich Equals() und GetHashCode() für einen effektiven Objektvergleich in C# ordnungsgemäß überschreiben?

DDD
Freigeben: 2025-01-04 21:16:39
Original
208 Leute haben es durchsucht

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

Überschreiben von Equals() und GetHashCode() für effektive Objektäquivalenz

Auf der Suche nach Objektgleichheit werden Equals() und GetHashCode( ) Methoden spielen eine zentrale Rolle. Bei benutzerdefinierten Klassen ist es erforderlich, diese Methoden zu überschreiben, um einen sinnvollen Vergleichs- und Hashing-Mechanismus einzurichten. Dieser Artikel beleuchtet den richtigen Ansatz zur Implementierung dieser Methoden im Kontext einer RecommendationDTO-Klasse und ermöglicht eine nahtlose Integration mit der LINQ Except()-Methode.

Überschreiben von Equals()

  1. Nullable Types: Im bereitgestellten Code prüft die Equals()-Methode auf Null Referenzen. Für nullfähige Typen wie DateTime? sollte der Vergleich jedoch geändert werden, um Nullwerte angemessen zu verarbeiten.
  2. Alle Eigenschaften berücksichtigen: Der Gleichheitsvergleich sollte alle relevanten Eigenschaften berücksichtigen, die die Geschäftsäquivalenz von definieren die Objekte. In diesem Fall wird nur ReferenceId verglichen, es müssen jedoch möglicherweise auch andere wichtige Eigenschaften einbezogen werden.

Überschreiben von GetHashCode()

  1. Hash-Code-Berechnung: Die GetHashCode()-Methode sollte einen Hash-Code basierend auf den Eigenschaften berechnen, die für den Gleichheitsvergleich verwendet werden. Da die Referenz-ID für die Gleichheit verwendet wird, sollte sie auch zur Berechnung des Hash-Codes verwendet werden.
  2. Konsistentes Hashing: Der Hash-Code sollte über mehrere Aufrufe für dasselbe Objekt hinweg konsistent sein. Dadurch wird sichergestellt, dass Objekte mit denselben Eigenschaften immer denselben Hash-Code haben, was zu effizienten Hashing- und Suchvorgängen führt.

Beispielimplementierung

Hier ist eine verbesserte Implementierung der Methoden Equals() und GetHashCode() für die Klasse RecommendationDTO:

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();
}
Nach dem Login kopieren

Durch Implementierung Equals() und GetHashCode() auf diese Weise kann die RecommendationDTO-Klasse nun effektiv mit der LINQ-Except()-Methode verwendet werden, wodurch sichergestellt wird, dass Objekte mit denselben aussagekräftigen Eigenschaften als unterschiedlich behandelt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Equals() und GetHashCode() für einen effektiven Objektvergleich in C# ordnungsgemäß überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage