Un ensemble est une collection de valeurs uniques. L'implémentation par défaut d'un ensemble dans .NET est HashSet<T>.
La classe HashSet utilise la méthode GetHashCode() de chaque élément.
Par défaut, l'implémentation de GetHashCode() pour les types référence renvoie une valeur de hachage basée sur son emplacement mémoire. Cela signifie que des objets de type référence différents auront un code de hachage différent (c'est ce qu'on appelle l'égalité de référence). Les types valeur, eux, renvoient par défaut une valeur de hachage basée sur leurs champs et propriétés. Cela signifie que des objets de type valeur différents qui ont les mêmes valeurs de champs et de propriétés auront le même code de hachage (c'est ce qu'on appelle l'égalité structurelle).
Tu peux redéfinir l'implémentation de GetHashCode() sur tes propres classes, ce qui te permet de faire en sorte qu'un type référence ait une égalité structurelle.