Sobes.tech
Junior — Middle

Como o método GetHashCode afeta o funcionamento do dicionário no .NET?

sobes.tech IA

Resposta da IA

O método GetHashCode no .NET é usado para obter o código hash de um objeto, que é aplicado em tabelas de dispersão, por exemplo, em dicionários (Dictionary<TKey, TValue>).

Quando adiciona um objeto ao dicionário, primeiro é chamado GetHashCode para determinar a caixa (bucket) onde será armazenado. Ao procurar um objeto, o dicionário usa o código hash para acesso rápido.

É importante que:

  • Se dois objetos são iguais (de acordo com o método Equals), seus códigos hash devem coincidir.
  • Se os códigos hash diferem, os objetos são considerados diferentes.

Uma implementação incorreta de GetHashCode pode fazer com que o dicionário não consiga encontrar uma chave, mesmo que ela exista, ou reduzir o desempenho devido a um grande número de colisões.

Exemplo de uma implementação correta:

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);
    }
}

Assim, GetHashCode influencia a correção e eficiência do funcionamento do dicionário.