我有一个获取IDictionary作为参数的方法.现在我想提供一个从这个字典中检索值的方法,但它应该是case-invariant.
所以我现在的解决方案就是有一个静态函数循环遍历键并将它们转换为下面这样的:
private static IDictionary> ConvertKeysToLowerCase( IDictionary > dictionaries) { IDictionary > resultingConvertedDictionaries = new Dictionary >(); foreach(ILanguage keyLanguage in dictionaries.Keys) { IDictionary convertedDictionatry = new Dictionary (); foreach(string key in dictionaries[keyLanguage].Keys) { convertedDictionatry.Add(key.ToLower(), dictionaries[keyLanguage][key]); } resultingConvertedDictionaries.Add(keyLanguage, convertedDictionatry); } return resultingConvertedDictionaries; }
现在,这没关系,但仍然是一大堆代码与我的"干净和高效"的想法相矛盾.你知道任何替代方法,以便字典的.ContainsKey()方法不区分套管吗?
是 - 传递Dictionary构造函数StringComparer.OrdinalIgnoreCase
(或另一个忽略大小写的比较器,具体取决于您的文化敏感性需求).
乔恩