Un insieme è una collezione di valori unici. L'implementazione predefinita di un insieme in .NET è HashSet<T>.
La classe HashSet usa il metodo GetHashCode() di ogni elemento.
Per impostazione predefinita, l'implementazione di GetHashCode() per i tipi di riferimento restituisce un hash della sua posizione in memoria. Questo significa che oggetti diversi di un tipo di riferimento avranno un codice hash diverso (questo è noto come uguaglianza per riferimento). I tipi di valore, per impostazione predefinita, restituiscono un hash dei loro campi/proprietà. Questo significa che oggetti diversi di un tipo di valore con gli stessi valori di campo/proprietà avranno lo stesso codice hash (questo è noto come uguaglianza strutturale).
Puoi sovrascrivere l'implementazione di GetHashCode() sulle tue classi: potresti usarlo per far sì che un tipo di riferimento abbia un'uguaglianza strutturale.