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

时间:2013-03-11 20:12:19

标签: c# .net-4.0

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

我更喜欢避免使用字典,其中键是大写的,值是正确的,或反之。

3 个答案:

答案 0 :(得分:16)

你想要这样的东西:

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

答案 1 :(得分:0)

考虑具有不区分大小写的比较的Dictionary是否适合您。除非您关心单词的顺序Dictionary,否则会提供比列表更好的查找效果。

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

答案 2 :(得分:0)

您也可以在列表中使用StringComparer

if (listOfValues.Contains(value, StringComparer.OrdinalIgnoreCase))