我在列表中有一个单词列表。使用.Contains(),我可以确定一个单词是否在列表中。如果我指定的单词在列表中,如何从列表中获取单词的区分大小写拼写?例如,当单词“磷酸钠”时,.Contains()为真,但列表中包含“磷酸钠”。如何执行不区分大小写的搜索(“磷酸钠”)但从列表中返回区分大小写的匹配(“磷酸钠”)?
我更喜欢避免使用字典,其中键是大写的,值是正确的,或反之。
答案 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))