Il requisito minimo è che il codice hash dovrebbe essere lo stesso per qualsiasi valore specificato. Quindi, questa implementazione funziona, ma la distribuzione è orribile:
public override int GetHashCode() {
return 1;
}
Per funzionare al meglio, i codici hash dovrebbe prendere in considerazione tutti i dati rilevanti in oggetto ed essere distribuita più uniformemente possibile entro il campo intero.
Un'implementazione che considera tutti i membri, ma non fornisce una distribuzione molto buona, può essere trovata nella struttura System.Drawing.Point. Esso utilizza XOR combinare i bit nei membri, il che significa che tutti i punti in cui X e Y sono uguali ottenere il codice hash di zero:
public override int GetHashCode() {
return this.X^this.Y;
}
Un modo per ottenere una migliore distribuzione è di moltiplicare un membro da un primo numero e aggiungere l'elemento successivo, ripetendo come necessario:
public override int GetHashCode() {
return ((this.Value1 * 251) + this.Value2) * 251 + this.Value3;
}
lo stesso metodo è stato utilizzato in semplici generatori casuali, in quanto disperde i valori abbastanza bene.
Alcuni punti davvero buoni lì. Grazie! – dotnetdev