Ein Set ist eine Sammlung eindeutiger Werte. Die Standardimplementierung eines Sets in .NET ist das HashSet<T>.
Die Klasse HashSet verwendet die GetHashCode()-Methode jedes Elements.
Standardmäßig gibt die GetHashCode()-Implementierung für Referenztypen einen Hash ihrer Speicheradresse zurück. Das bedeutet, dass verschiedene Objekte von Referenztypen einen unterschiedlichen Hashcode haben (das nennt man Referenzgleichheit). Werttypen geben standardmäßig einen Hash ihrer Felder bzw. Eigenschaften zurück. Das bedeutet, dass verschiedene Objekte von Werttypen mit denselben Feld- bzw. Eigenschaftswerten denselben Hashcode haben (das nennt man strukturelle Gleichheit).
Du kannst die GetHashCode()-Implementierung in deinen eigenen Klassen überschreiben. Damit kannst du erreichen, dass ein Referenztyp strukturelle Gleichheit besitzt.