任何人都知道如何进行List <string>不区分大小写的比较</string>

时间:2010-08-23 02:38:36

标签: c# asp.net

说我有一个名单

var names = new List<string>{"Tom", "Dick", "Harry"};

现在说我想搜索汤姆。

names.Contains("Tom");

不是问题但是我想用不同的外壳说“tOM”。

任何人都可以告诉我如何在不创建其他类的情况下执行此操作吗?

我有一个解决方案,我有一个继承自IEqualityComparer的Comparer类。

谢谢!

5 个答案:

答案 0 :(得分:9)

使用带有IEqualityComparer的Enumerable.Contains重载,并传入StringComparer.CurrentCultureIgnoreCaseStringComparer.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())

该函数返回一个布尔值,将检查非资本版本中的所有项目,无论文化是什么。