以不区分大小写的方式检查预先存在的字典中的密钥

时间:2013-08-12 18:03:36

标签: c# dictionary containskey

我想检查给我的字典是否包含特定字符串作为键。我需要以不区分大小写的方式进行此检查。例如,如果有人向我发送了一个HTTP请求对象,该对象具有一个名为headers的字符串字典。我需要能够检查“Content-Type”或“content-type”或“content-Type”是否是request.headers字典中的键。

通常ContainsKey()不起作用,因为我认为它以区分大小写的方式检查密钥。

我也知道存在通过将字典定义为不区分大小写来解决此问题的方法。但在这里,我无法控制传递给我的字典。

1 个答案:

答案 0 :(得分:3)

您可以选择两种方式,因为您无法控制字典的构造方式:

迭代整个字典的对,找到给定的密钥:

var match = dictionary.Where(pair => string.Equals(pair.Key, "hello"
    , StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

或者使用您自己的比较器创建一个新词典:

var caseSensitiveDictionary = new Dictionary<string, string>(dictionary
    , StringComparer.InvariantCultureIgnoreCase);

给定的比较器将用于为添加的键创建哈希值,因此如果使用其他比较器构造字典,则使用该比较器的给定字符串的哈希值将与非案例不匹配 - 敏感的比较器,所以它无法帮助你。

如果您只是在完成关键操作后才会检查字典。如果您要一次执行多个搜索,那么使用新构建的字典非常值得。