Heim >Backend-Entwicklung >C++ >Wie soll ich zwei Instanzen eines Referenztyps in C# vergleichen?
Best Practice: Vergleich zweier Referenztypinstanzen in C#
Achten Sie beim Vergleich von Referenztypen darauf, das erwartete Verhalten zu klären: Wertgleichheit oder Referenzidentität.
Überschreiben Sie den Gleichheitsoperator ("==") und die Equals-Methode, um eine Referenzidentität zu erreichen
In der Vergangenheit haben Entwickler die Methoden „==" und Equals überschrieben, um die referenzielle Identität zu überprüfen. Codierungsstandards raten jedoch davon ab, da dies in bestimmten Situationen zu Mehrdeutigkeiten führen kann.
Option 1: Implementieren Sie die IEquatable
Für Referenztypen mit Wertsemantik (unveränderliche Typen, bei denen Gleichheit als Gleichheit behandelt wird) besteht der empfohlene Ansatz in der Implementierung der System.IEquatable
Beispiel:
<code class="language-csharp">class Point : IEquatable<Point> { // ... public bool Equals(Point other) { return X.Equals(other.X) && Y.Equals(other.Y); } // ... }</code>
Option 2: Verwenden Sie eine benutzerdefinierte Equals-Methode mit Typprüfung, um Wertegleichheit zu erreichen
Wenn Sie eine benutzerdefinierte Equals-Methode bevorzugen, stellen Sie sicher, dass diese sowohl die Referenzgleichheit als auch den Typ des verglichenen Objekts überprüft. Dies verhindert unerwartetes Verhalten beim Vergleich abgeleiteter Klassenobjekte.
Beispiel:
<code class="language-csharp">public bool Equals(Point other) { if (other is null) return false; if (other.GetType() != GetType()) return false; return X.Equals(other.X) && Y.Equals(other.Y); }</code>
Wann sollte eine referenzielle Identität verwendet werden?
Implementieren Sie die Operatoren „==" und „!=" nicht für Referenzklassen, die keine unveränderlichen Werte darstellen. Verlassen Sie sich stattdessen auf ihr Standardverhalten beim Vergleichen von Objekten auf Identität.
Das obige ist der detaillierte Inhalt vonWie soll ich zwei Instanzen eines Referenztyps in C# vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!