【发布时间】:2009-06-04 19:40:08
【问题描述】:
我在字符串数组上使用Array.Contains 方法。我怎样才能让它不区分大小写?
【问题讨论】:
标签: .net
我在字符串数组上使用Array.Contains 方法。我怎样才能让它不区分大小写?
【问题讨论】:
标签: .net
array.Contains("str", StringComparer.OrdinalIgnoreCase);
或者根据具体情况,您可能更喜欢:
array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);
【讨论】:
CurrentCulture),您应该使用 Ordinal 而不是 InvariantCulture。
InvariantCulture 是有正当理由的。使用上述三个选项中的任何一个都取决于具体情况。我不反对您重新排序,但我删除了“可能不是”的评论。答案中已经明确表明,您应该选择在当前情况下适合您的那个。
我这边的一些重要说明,或者至少将一些分布式信息放在一个地方-关于上面的提示,使用 StringComparer,例如:
if (array.Contains("str", StringComparer.OrdinalIgnoreCase))
{}
array.Contains() 是一种 LINQ 扩展方法,因此仅适用于 .NET 3.5 或更高版本的标准,需要:using System;using System.Linq;
但是:在 .NET 2.0 中,简单的 Contains() 方法(不考虑不区分大小写)至少可以像这样使用强制转换:
if ( ((IList<string>)mydotNet2Array).Contains(“str”) )
{}
由于 Contains() 方法是 IList 接口的一部分,这不仅适用于数组,还适用于列表等。
【讨论】:
实现一个自定义IEqualityComparer,考虑不区分大小写。
另外,请检查this。那么(理论上)你所要做的就是:
myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower()))
【讨论】:
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true
【讨论】: