HashSets und verschiedene Instanzen der Klasse mit allen identischen Mitgliedern
-
19-09-2019 - |
Frage
Lassen Sie uns sagen, ich habe eine Klasse namens myclass.
In meinem Code habe ich zwei Instanzen von myclass, MyClass1 und MyClass2. Alles an ihnen ist (öffentliche und private) Eigenschaften sind identisch.
Wenn ich versuche, sie beide zu einem HashSet hinzufügen wird es beide oder nur einer? Wenn es beide addiert und ich will es nicht, ich kann overidde gleich in der myclass Definition und die Hasset werden wissen, wie es zu benutzen?
Lösung
Kurze Antwort, es hängt von Ihrem Objekt Equals-Methode.
Lange Antwort:
HashSet wird ein IEqualityComparer verwenden, um festzustellen, ob zwei Objekte gleich sind. Wenn Sie noch kein Konto zur Verfügung stellen wird es EqualityComparer.Default
verwenden; die effektiv nur verwendet object.Equals (a, b) plus einige Sachen Boxen Werttypen zu vermeiden.
Überprüfen Sie die Dokumentation für object.Equals(a, b)
. Es ist effektiv nur a.Equals(b)
Durchführung nach für nulls Überprüfung
Die Standardimplementierung von object.Equals(other)
ist nur als Referenz Gleichheit zu überprüfen (das heißt, sie sind genau die gleiche Instanz eines Objekts), aber Sie können diese jede ausführen außer Kraft setzen überprüfen Sie so wollen, wie die Überprüfung, ob ein ID-Feld identisch ist. Beachten Sie, wenn zwingende Equals Sie müssen auch GetHashCode überschreiben.
Wenn Sie ändern möchten, wie HashSet Gleichheit bestimmt, ohne die Objektdefinition ändern können Sie es schaffen, einen benutzerdefinierten IEqualityComparer statt.