Инновационный словарь с индексом ввода-вывода с строковым ключом в С#

Если у меня есть Dictionary<String,...>, возможно ли сделать такие методы, как ContainsKey без учета регистра?

Это казалось связанным, но я не понял его правильно: С# Словарь: создание ключа без учета регистра через объявления

Ответ 1

Это казалось связанным, но я не понял его правильно: С# Словарь: создание ключа без учета регистра с помощью объявлений

Это действительно связано. Решение состоит в том, чтобы указать экземпляру словаря не использовать стандартный метод сравнения строк (который чувствителен к регистру), а скорее использовать регистр, нечувствительный. Это делается с помощью соответствующего конструктора:

var dict = new Dictionary<string, YourClass>(
        StringComparer.InvariantCultureIgnoreCase);

Конструктор ожидает IEqualityComparer, который сообщает словарю, как сравнивать ключи.

StringComparer.InvariantCultureIgnoreCase дает вам экземпляр IEqualityComparer, который сравнивает строки без учета регистра.

Ответ 2

var myDic = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
myDic.Add("HeLlo", "hi");

if (myDic.ContainsKey("hello"))
    Console.WriteLine(myDic["hello"]);

Ответ 3

Есть мало шансов, когда вы имеете дело со словарем, который вытягивается из сторонней или внешней dll. Использование linq

YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))