Sobes.tech
Junior — Middle

Jakie kroki należy podjąć, aby użyć własnej klasy jako klucza w kolekcji typu słownik?

sobes.tech AI

Odpowiedź od AI

Aby używać własnej klasy jako klucza w słowniku (Dictionary<TKey, TValue>) w C#, konieczne jest zapewnienie poprawnego porównania kluczy i obliczania ich kodów hash. W tym celu należy:

  1. Nadpisać metodę Equals(object obj), tak aby poprawnie porównywała obiekty Twojej klasy po istotnych polach.
  2. Nadpisać metodę GetHashCode(), aby obiekty uznane za równe miały ten sam kod hash.

Przykład:

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

Alternatywnie, można zaimplementować interfejs IEqualityComparer<T> i przekazać go do konstruktora słownika, jeśli nie chce się modyfikować samej klasy.