Sobes.tech
Back to questions
Junior — Middle
63

Какие типы данных допустимо применять в качестве ключей при работе со словарем?

Answer from AI

sobes.tech AI

В C# ключами словаря (Dictionary<TKey, TValue>) могут быть любые типы, которые удовлетворяют следующим требованиям:

  • Имплементируют корректный метод Equals для сравнения на равенство.
  • Имплементируют метод GetHashCode для вычисления хеш-кода.

Это необходимо, чтобы словарь мог эффективно хранить и искать элементы.

Примеры допустимых ключей:

  • Примитивные типы (int, string, Guid)
  • Пользовательские классы и структуры, если переопределены Equals и GetHashCode

Пример пользовательского ключа:

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

var dict = new Dictionary<Person, string>();
dict[new Person { Name = "Alice", Age = 30 }] = "Developer";

Если ключ не переопределяет эти методы, словарь может работать некорректно.