Heim >Backend-Entwicklung >C++ >Wie soll ich zwei Instanzen eines Referenztyps in C# vergleichen?

Wie soll ich zwei Instanzen eines Referenztyps in C# vergleichen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-07 17:37:39522Durchsuche

How Should I Compare Two Instances of a Reference Type in C#?

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-Schnittstelle

für Wertegleichheit

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-Schnittstelle. Dadurch können Sie einen benutzerdefinierten Gleichheitsvergleich definieren, der sich auf Werte und nicht auf Referenzen konzentriert.

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!

Stellungnahme:
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