Нечувствительный к регистру словарь со строковым ключом в C#

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

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

3 ответов


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

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

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

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

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


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

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

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

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