C# LanguageUguale e GetHashCode


Osservazioni

Ogni implementazione di Equals deve soddisfare i seguenti requisiti:

  • Riflessivo : un oggetto deve essere uguale a se stesso.
    x.Equals(x) restituisce true .

  • Simmetrico : non vi è alcuna differenza se si confronta x con y o y con x - il risultato è lo stesso.
    x.Equals(y) restituisce lo stesso valore di y.Equals(x) .

  • Transitivo : se un oggetto è uguale a un altro oggetto e questo è uguale a un terzo, il primo deve essere uguale al terzo.
    if (x.Equals(y) && y.Equals(z)) restituisce true , quindi x.Equals(z) restituisce true .

  • Coerentemente : se si confronta un oggetto con un altro più volte, il risultato è sempre lo stesso.
    Le successive chiamate di x.Equals(y) restituiscono lo stesso valore fintanto che gli oggetti referenziati da x e y non vengono modificati.

  • Confronto con null : nessun oggetto è uguale a null .
    x.Equals(null) restituisce false .

Implementazioni di GetHashCode :

  • Compatibile con Equals : se due oggetti sono uguali (ovvero che Equals restituisce true), allora GetHashCode deve restituire lo stesso valore per ognuno di essi.

  • Ampio intervallo : se due oggetti non sono uguali ( Equals dice false), ci dovrebbe essere un'alta probabilità che i loro codici hash siano distinti. Spesso l'hashing perfetto non è possibile in quanto esiste un numero limitato di valori tra cui scegliere.

  • Economico : dovrebbe essere poco costoso calcolare il codice hash in tutti i casi.

Vedi: Linee guida per il sovraccarico di Equals () e Operatore ==

Uguale e GetHashCode Esempi correlati