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() メソッドが大文字と小文字を区別しないように、これに代わる方法を知っていますか?