0

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

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

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

4

1 回答 1

5

您有两个可用的选项,因为您无法控制字典的构造方式:

迭代整个字典的对以找到给定的键:

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

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

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

给定的比较器将用于为添加的键创建哈希,因此如果字典是用其他比较器构造的,那么使用该比较器的给定字符串的哈希将与不区分大小写的比较器不匹配,所以帮不了你。

如果您只打算在一次检查字典时最好只遍历键。如果您要一次执行多个搜索,那么使用新构建的字典很可能是值得的。

于 2013-08-12T18:11:22.580 回答