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

本文关键字:存在 字典 关键字 检查 不区 大小写 方式 | 更新日期: 2023-09-27 18:27:34

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

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

我也知道有一些方法可以通过将字典定义为不区分大小写来解决这个问题。但在这里,我无法控制传递给我的字典类型。

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

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

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

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

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

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

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

如果你只想检查一次字典,那么最好只遍历关键字。如果你要一次执行多个搜索,那么使用一个新构建的字典可能是非常值得的。