У меня есть метод, который получает IDictionary в качестве параметра. Теперь я хочу предоставить метод, который извлекает значение из этого словаря, но он должен быть инвариантным к регистру.
Итак, мое решение для этого прямо сейчас состояло в том, чтобы иметь статическую функцию, которая перебирает ключи и преобразует их вLower() следующим образом:
private static IDictionary<ILanguage, IDictionary<string, string>> ConvertKeysToLowerCase(
IDictionary<ILanguage, IDictionary<string, string>> dictionaries)
{
IDictionary<ILanguage, IDictionary<string, string>> resultingConvertedDictionaries
= new Dictionary<ILanguage, IDictionary<string, string>>();
foreach(ILanguage keyLanguage in dictionaries.Keys)
{
IDictionary<string, string> convertedDictionatry = new Dictionary<string, string>();
foreach(string key in dictionaries[keyLanguage].Keys)
{
convertedDictionatry.Add(key.ToLower(), dictionaries[keyLanguage][key]);
}
resultingConvertedDictionaries.Add(keyLanguage, convertedDictionatry);
}
return resultingConvertedDictionaries;
}
Теперь это нормально, но все же это довольно большой кусок кода, который противоречит моей идее «чистого и эффективного». Знаете ли вы какие-либо альтернативы этому, чтобы метод словаря .ContainsKey() не различал регистр?