Sobes.tech
Junior — Middle

Защо е важно да пренапишем метода GetHashCode в класовете?

sobes.tech AI

Отговор от AI

Преписването на метода GetHashCode е важно за правилната работа на обектите в колекции, базирани на хеш, като Dictionary, HashSet и други.

Причини:

  • GetHashCode връща числова стойност, която се използва за бързо търсене на обект в хеш таблици.
  • Ако два обекта се считат за равни (според метода Equals), те трябва да връщат еднакъв хеш код, за да ги обработват правилно колекциите.
  • Ако не се препише GetHashCode заедно с Equals, обектите могат да бъдат неправилно сравнявани или дублирани в колекциите.

Пример:

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

По този начин, преписването на GetHashCode осигурява съгласуваност с Equals и правилната работа на обектите в хеш структурите.