Sobes.tech
Junior — Middle

Jak metoda GetHashCode wpływa na działanie słownika w .NET?

sobes.tech AI

Odpowiedź od AI

Metoda GetHashCode w .NET służy do uzyskania kodu hash obiektu, który jest używany w tablicach haszujących, na przykład w słownikach (Dictionary<TKey, TValue>).

Gdy dodajesz obiekt do słownika, najpierw wywoływana jest metoda GetHashCode, aby określić kubełek (bucket), w którym zostanie przechowany. Podczas wyszukiwania obiektu słownik używa kodu hash do szybkiego dostępu.

Ważne jest, aby:

  • Jeśli dwa obiekty są równe (według metody Equals), ich kody hash muszą się zgadzać.
  • Jeśli kody hash się różnią, obiekty są uważane za różne.

Nieprawidłowa implementacja GetHashCode może spowodować, że słownik nie będzie mógł znaleźć klucza, nawet jeśli jest on tam, lub obniżyć wydajność z powodu dużej liczby kolizji.

Przykład poprawnej implementacji:

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

W ten sposób GetHashCode wpływa na poprawność i wydajność działania słownika.