7

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

我更喜欢避免使用键为大写且值正确大小写的字典,反之亦然。

4

3 回答 3

17

你想要这样的东西:

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

如果找不到匹配项,这将match作为null参考。

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

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

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

于 2013-03-11T20:14:34.203 回答
0

考虑具有不区分大小写比较的字典是否适合您。除非您关心单词的顺序,否则您Dictionary的查找性能会比列表好得多。

Dictionary<string, string> openWith = 
      new Dictionary<string, string>( 
         StringComparer.CurrentCultureIgnoreCase);
于 2013-03-11T20:20:28.663 回答
0

您也可以StringComparer在列表中使用

if (listOfValues.Contains(value, StringComparer.OrdinalIgnoreCase))
于 2018-11-16T09:10:42.637 回答