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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top