Sobes.tech
Junior — Middle

Какви методи могат да се използват за избягване на ограниченията по размер или ограниченията при използване на ключ в речник?

sobes.tech AI

Отговор от AI

В C# речниците (Dictionary<TKey, TValue>) имат ограничения върху типовете ключове и техния размер, например ключът трябва да бъде хешируем и да има правилно реализирани методи GetHashCode и Equals.

За да избегнете ограниченията по размер или тип на ключа, можете:

  • Да използвате съставни ключове, например, да създадете клас или структура, която обединява няколко стойности, и да реализирате за нея правилните методи GetHashCode и Equals.
  • Да преобразувате големи или сложни ключове в по-компактни представяния, например, сериализирайки обекта в низ или използвайки хеш-функция.
  • Да използвате специализирани колекции или структури от данни, ако стандартният речник не е подходящ.

Пример за съставен ключ:

struct CompositeKey
{
    public int Id;
    public string Name;

    public override bool Equals(object obj) => obj is CompositeKey other && Id == other.Id && Name == other.Name;
    public override int GetHashCode() => HashCode.Combine(Id, Name);
}

var dict = new Dictionary<CompositeKey, string>();
dict[new CompositeKey { Id = 1, Name = "Test" }] = "Value";