Sobes.tech
Junior — Middle

Come influisce il metodo GetHashCode sul funzionamento del dizionario in .NET?

sobes.tech AI

Risposta dell'AI

Il metodo GetHashCode in .NET viene utilizzato per ottenere il codice hash di un oggetto, che viene applicato nelle tabelle hash, ad esempio nei dizionari (Dictionary<TKey, TValue>).

Quando si aggiunge un oggetto a un dizionario, viene prima chiamato GetHashCode per determinare il bucket in cui verrà memorizzato. Durante la ricerca di un oggetto, il dizionario utilizza il codice hash per un accesso rapido.

È importante che:

  • Se due oggetti sono uguali (secondo il metodo Equals), i loro codici hash devono corrispondere.
  • Se i codici hash sono diversi, gli oggetti sono considerati diversi.

Una implementazione errata di GetHashCode può portare il dizionario a non trovare la chiave, anche se presente, o a ridurre le prestazioni a causa di un alto numero di collisioni.

Esempio di implementazione corretta:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name && Age == other.Age;
        return false;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}

In questo modo, GetHashCode influisce sulla correttezza e sull’efficienza del funzionamento del dizionario.