Ich habe eine Klasse wie diese
%Vor% Ich möchte wissen, ob es möglich ist, mit Instanzen dieser Klasse direkt zu vergleichen und herauszufinden, dass sie genau gleich sind? Was ist der Mechanismus? Ich suche gor sowas wie if(testData1 == testData2) //Do Something
Und wenn nicht, wie geht das?
Sie sollten die IEquatable<T>
-Schnittstelle in Ihrer Klasse implementieren, was Ihnen das ermöglicht Definieren Sie Ihre Gleichheitslogik.
Eigentlich sollten Sie auch die Methode Equals
überschreiben.
Es gibt drei Möglichkeiten, wie Objekte eines Referenztyps T
miteinander verglichen werden können:
object.Equals
IEquatable<T>.Equals
(nur für Typen, die IEquatable<T>
implementieren) ==
Darüber hinaus gibt es zwei Möglichkeiten für jeden dieser Fälle:
T
(oder eine andere Basis von T
) object
Die Regeln, die du unbedingt wissen musst, sind:
Equals
und operator==
ist der Test auf Referenzgleichheit Equals
funktionieren korrekt, unabhängig davon, welcher statische Typ der zu vergleichenden Objekte IEquatable<T>.Equals
sollte sich immer wie object.Equals
verhalten, aber wenn der statische Typ der Objekte T
ist, bietet es eine etwas bessere Leistung Was bedeutet das alles in der Praxis?
Als Faustregel sollten Sie Equals
verwenden, um nach Gleichheit zu suchen ( object.Equals
nach Bedarf zu überschreiben) und auch IEquatable<T>
implementieren, um eine etwas bessere Leistung zu erzielen. In diesem Fall sollte object.Equals
in IEquatable<T>.Equals
implementiert werden.
Für einige spezifische Typen (wie System.String
) ist es auch akzeptabel, operator==
zu verwenden, obwohl Sie darauf achten müssen, keine "polymorphen Vergleiche" zu machen. Die Equals
-Methoden dagegen funktionieren auch dann korrekt, wenn Sie solche Vergleiche durchführen.
Sie können ein Beispiel für einen polymorphen Vergleich sehen und warum es ein Problem sein kann hier .
Vergessen Sie nicht, dass Sie, wenn Sie object.Equals
überschreiben, auch object.GetHashCode
entsprechend überschreiben müssen.
Eine Möglichkeit besteht darin, IEquatable<T>
Sie können auch die Equals (Objekt) -Methode (aus System.Object) überschreiben, wenn Sie dies tun, sollten Sie auch GetHashCode Sehen Sie hier
Sie können die equals-Methode überschreiben und darin manuell die Objekte
vergleichenSehen Sie sich auch die Richtlinien zum Überladen von Equals () und Operator an ==
Zuallererst ist die Gleichheit schwierig zu definieren, und nur Sie können definieren, was Gleichheit für Sie bedeutet
Hier ist eine Diskussion und eine Antwort hier
Was ist "Best Practice"? "Zum Vergleich zweier Instanzen eines Referenztyps?
Implementiere die IEquatable<T> interface
. Dies definiert eine verallgemeinerte Methode, die ein Werttyp oder eine Klasse implementiert, um eine typspezifische Methode zur Bestimmung der Instanzengleichheit zu erstellen. Mehr Informationen hier: