Beim Vergleich von Referenztypen in .NET ist es wichtig, den Unterschied zwischen Referenzgleichheit und Wertgleichheit zu verstehen. Referenzgleichheit prüft, ob zwei Referenzen auf dasselbe Objekt verweisen, während Wertegleichheit prüft, ob die Objekte dieselben Daten haben.
Überschreiben Sie den Gleichheitsoperator (==) und die Equals-Methode
Es wird nicht empfohlen, den Gleichheitsoperator (==) und/oder die Equals-Methode zu überschreiben, um Referenztypen zu vergleichen, es sei denn, der Typ drückt Wertesemantik aus (d. h. unveränderliche Objekte, die aufgrund ihrer Daten als gleich betrachtet werden). Erwägen Sie in diesem Fall die Implementierung der System.IEquatable
IEquatable-Schnittstelle
Wenn Ihr Referenztyp Wertesemantik darstellt, implementieren Sie System.IEquatable
IComparable-Schnittstelle
IComparable ist in erster Linie für die Verwendung mit Werttypen und nicht für Referenztypen konzipiert. Vermeiden Sie die Verwendung mit Referenztypen.
Benutzerdefinierter Vergleich
Anstatt den Gleichheitsoperator zu überschreiben oder IComparable zu implementieren, sollten Sie erwägen, eine benutzerdefinierte Methode zum Vergleichen von Referenztypen zu erstellen. Verwenden Sie die Equals-Methode, um die Objektidentität zu überprüfen und sie zu überschreiben, um verwandte Eigenschaften zu vergleichen.
Beispiel für gleiche Werte
Das Folgende ist ein Beispiel für die Implementierung der Wertegleichheit für die Point-Klasse:
<code class="language-csharp">class Point : IEquatable<Point> { public int X { get; } public int Y { get; } public Point(int x = 0, int y = 0) { X = x; Y = y; } public bool Equals(Point other) { if (other is null) return false; return X.Equals(other.X) && Y.Equals(other.Y); } public override bool Equals(object obj) => Equals(obj as Point); public static bool operator ==(Point lhs, Point rhs) => object.Equals(lhs, rhs); public static bool operator !=(Point lhs, Point rhs) => !(lhs == rhs); public override int GetHashCode() => HashCode.Combine(X, Y); }</code>
Fazit
Für Referenztypen mit Wertesemantik implementieren Sie System.IEquatable
Das obige ist der detaillierte Inhalt vonWie vergleiche ich Referenztypen in .NET am besten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!