我想检查给我的字典是否包含特定字符串作为键。我需要以不区分大小写的方式进行此检查。例如,如果有人向我发送了一个HTTP请求对象,该对象具有一个名为headers的字符串字典。我需要能够检查“Content-Type”或“content-type”或“content-Type”是否是request.headers字典中的键。
通常ContainsKey()
不起作用,因为我认为它以区分大小写的方式检查密钥。
我也知道存在通过将字典定义为不区分大小写来解决此问题的方法。但在这里,我无法控制传递给我的字典。
答案 0 :(得分:3)
您可以选择两种方式,因为您无法控制字典的构造方式:
迭代整个字典的对,找到给定的密钥:
var match = dictionary.Where(pair => string.Equals(pair.Key, "hello"
, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
或者使用您自己的比较器创建一个新词典:
var caseSensitiveDictionary = new Dictionary<string, string>(dictionary
, StringComparer.InvariantCultureIgnoreCase);
给定的比较器将用于为添加的键创建哈希值,因此如果使用其他比较器构造字典,则使用该比较器的给定字符串的哈希值将与非案例不匹配 - 敏感的比较器,所以它无法帮助你。
如果您只是在完成关键操作后才会检查字典。如果您要一次执行多个搜索,那么使用新构建的字典非常值得。