说我有一个名单
var names = new List<string>{"Tom", "Dick", "Harry"};
现在说我想搜索汤姆。
names.Contains("Tom");
不是问题但是我想用不同的外壳说“tOM”。
任何人都可以告诉我如何在不创建其他类的情况下执行此操作吗?
我有一个解决方案,我有一个继承自IEqualityComparer
的Comparer类。
谢谢!
答案 0 :(得分:9)
使用带有IEqualityComparer的Enumerable.Contains重载,并传入StringComparer.CurrentCultureIgnoreCase或StringComparer.InvariantCultureIgnoreCase。
names.Contains("tOm", StringComparer.CurrentCultureIgnoreCase);
答案 1 :(得分:4)
尝试此操作以检查名称的任何案例安排。
bool hasTom = names.Any(x => x.Equals("tOM",
StringComparison.InvariantCultureIgnoreCase));
这将确保您列出并且不区分大小写输入。有关String.Compare()
和String.Equals()
的{{3}}的更多内容。
答案 2 :(得分:1)
它必须是一个列表吗? HashSet有一个构造函数重载,可以采用相等比较器。
答案 3 :(得分:0)
这个怎么样?
names.Exists(n=> n.ToLower() == ("tOM").ToLower())
答案 4 :(得分:0)
事实上,最好的方法是:
names.Any(n =&gt; n.ToLowerInvariant()==“Tom”.ToLowerInvariant())
该函数返回一个布尔值,将检查非资本版本中的所有项目,无论文化是什么。