Словарь без учета регистра не работает - PullRequest
7 голосов
/ 15 июня 2011

Я потратил пару часов, пытаясь выяснить, почему мой общий словарь (Of String, String) не игнорирует регистр.

Вот мой код:

Dim test As New System.Collections.Generic.Dictionary(Of String, String)(System.StringComparison.OrdinalIgnoreCase)
test.Add("FROG", "1")
Console.WriteLine(test.ContainsKey("frog"))

Консоль показывает «Ложь» каждый раз. Это должно показывать «True».

Если я использую:

Console.WriteLine(test."frog")) 

Я получаю исключение KeyNotFoundException.

Кажется, что параметр Comparer полностью игнорируется.

Что происходит?

1 Ответ

15 голосов
/ 15 июня 2011

Как намекнул здесь , это простая орфографическая ошибка.

Проблема в системе. Сравнение строк .OrdinalIgnoreCase - это целочисленное перечисление.
Это должен быть System. StringComparer .OrdinalIgnoreCase

Новый System.Collections.Generic.Dictionary (Of String, String) (System.StringComparison.OrdinalIgnoreCase) фактически вызывает перегруженный конструктор New (вместимость как целое число) , и прохождение 5.

Таким образом, чтобы все это работало как положено, строка экземпляра должна выглядеть так:

Dim test As New System.Collections.Generic.Dictionary(Of String, String)(System.StringComparer.OrdinalIgnoreCase)
...