.NET Framework предлагает несколько классов словарей. Главный класс, который вы можете использовать - это Dictionary<TKey, TValue>. Он предоставляет те же свойства и методы, что и SortedList<TKey, TValue> (если интересно, могу рассказать о них отдельно).
Доступ к элементам в словаре обеспечивается по ключу. Ключ может быть некоторого пользовательского типа, но этот тип обязан переопределять метод GetHashCode() класса Object. Всякий раз, когда класс словаря должен найти местоположение элемента, он вызывает метод GetHashCode(). Этот метод возвращает целое число, которое используется словарем для вычисления индекса, куда помещен элемент.
Реализация GetHashCode() должна удовлетворять следующим требованиям:
- Один и тот же объект должен всегда возвращать одно и то же значение.
- Разные объекты могут возвращать одно и то же значение.
- Она не должна генерировать исключений.
- Она должна использовать как минимум, одно поле экземпляра.
- Значения хеш-кода должны распределяться равномерно по всему диапазону чисел типа int.
Чем лучше будет реализован метод GetHashCode(), тем выше будет производительность работы словаря.
Кроме реализации GetHashCode() тип ключа также должен реализовывать метод IEquality.Equals(), либо переопределять метод Equals() класса Object. Словарь проверяет два ключа А и В на эквивалентность: он вызывает A.Equals(B). Вы должны обеспечить, чтобы если истинно A.Equals(B), то A.GetHashCode() и B.GetHashCode() всегда должны возвращать один и тот же хеш-код.
Не рекомендуется использовать в качестве ключа простой числовой тип Int32. Хотя он реализует интерфейс IEquatable и перегружает GetHashCode(), он не отвечает требованиям производительности.