如何在List中获得不区分大小写的匹配?

本文关键字:大小写 不区 List string | 更新日期: 2023-09-27 18:03:27

我有一个list中的单词列表。使用. contains(),我可以确定一个单词是否在列表中。如果我指定的单词在列表中,如何从列表中获得该单词的区分大小写的拼写?例如,当单词是"sodium phosphate"但列表包含"sodium phosphate"时,. contains()为真。我如何执行不区分大小写的搜索("磷酸钠"),但从列表中返回区分大小写的匹配("磷酸钠")?

我倾向于避免使用键是大写而值是正确大小写的字典,反之亦然。

如何在List<string>中获得不区分大小写的匹配?

你想要的是:

string match = list.FirstOrDefault(element => element.Equals(target, 
                                     StringComparison.CurrentCultureIgnoreCase));

如果找不到匹配项,这将使match作为null的引用。

(您可以使用List<T>.Find,但使用FirstOrDefault使代码更通用,因为它将在任何字符串序列上工作-在文件顶部使用using System.Linq;指令)

注意,我假设列表中没有空元素。如果你想处理这个问题,你可能需要使用一个静态方法调用:string.Equals(element, target, StringComparison.CurrentCultureIgnoreCase) .

还要注意,我假设您想要一个文化敏感的比较。其他选项参见StringComparison

考虑不区分大小写比较的Dictionary是否适合您。除非你关心单词的顺序,否则Dictionary会给你比list更好的查询性能。

Dictionary<string, string> openWith = 
      new Dictionary<string, string>( 
         StringComparer.CurrentCultureIgnoreCase);

您也可以在list

中使用StringComparer
if (listOfValues.Contains(value, StringComparer.OrdinalIgnoreCase))