Sobes.tech
Junior — Middle

Kodėl svarbu perrašyti metodą GetHashCode klasėse?

sobes.tech AI

Atsakymas iš AI

Perrašymas GetHashCode metodo yra svarbus teisingam objektų veikimui pagal maišą pagrįstose kolekcijose, tokiuose kaip Dictionary, HashSet ir kituose.

Priežastys:

  • GetHashCode grąžina skaitinę reikšmę, kuri naudojama greitam objekto paieškai maišų lentelėse.
  • Jei du objektai laikomi lygiais (pagal Equals metodą), jie turi grąžinti tą patį maišo kodą, kad kolekcijos juos tinkamai apdorotų.
  • Jei GetHashCode nėra perrašytas kartu su Equals, objektai gali būti neteisingai lyginami arba dubliuojami kolekcijose.

Pavyzdys:

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

Šiuo būdu GetHashCode perrašymas užtikrina suderinamumą su Equals ir teisingą objektų darbą maišų struktūrose.