Есть ли какие-либо ограничения символов в словарных ключах? - PullRequest
4 голосов
/ 17 мая 2009

В .NET я могу использовать любую строку в качестве словарного ключа? Это часть шаблонизатора, и я планирую разрешить пользователям добавлять свои собственные заголовки и значения.

Заголовками будут что-то вроде «Значение X» или «Сводка отчетов Analyze & XYZ», я беспокоюсь, если они получат исключение в виде редкого символа или чего-то в этом роде.

Я предполагаю, что есть ограничение по размеру, но ожидаю, что оно будет больше 256 символов. MSDN не имеет каких-либо подробностей по этому вопросу.

Ответы [ 3 ]

7 голосов
/ 17 мая 2009

Словарь не имеет специальных знаний о типах, используемых в качестве его ключей и значений. Независимо от типа объекта он просто вызовет методы GetHashCode и Equals, чтобы позволить ему поместить значение в нужное место и получить его снова. Это означает, что любой класс, который правильно реализует эти методы, может использоваться в качестве ключа.

Класс string правильно реализует эти методы на основе своего значения, поэтому, если вы можете создать экземпляр строки, вы можете использовать его в качестве ключа.

4 голосов
/ 17 мая 2009

Да, он может использовать любую допустимую строку (которая ограничена парой миллиардов байт).

Кстати, вы можете передать пользовательский IEqualityComparer<T>, который вы можете передать конструктору Dictionary, для которого может потребоваться максимальное ограничение.

1 голос
/ 17 мая 2009

Поскольку ключ - это просто строка .NET, см. Следующий связанный вопрос SO: Какова максимально возможная длина строки .NET?

...