2009-06-04 107 views

回答

227
array.Contains("str", StringComparer.OrdinalIgnoreCase); 

,或者根据具体情况,您可能希望:从我的身边

array.Contains("str", StringComparer.CurrentCultureIgnoreCase); 
array.Contains("str", StringComparer.InvariantCultureIgnoreCase); 
1
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true 
+2

但不会执行这每一个昂贵的ToLower将()调用项目在列表中?带有StringComparison超载的String.Equals在本例中更适合。 – 2011-05-19 20:49:17

1

执行一个自定义IEqualityComparer考虑不区分大小写。

此外,检查this了。所以后来(理论上),所有你需要做的是:

myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower())) 
+3

为什么要重新发明轮子? – 2009-06-04 19:46:29

+12

因为直到5分钟前我不知道StringComparer存在。 :) – Kon 2009-06-04 19:51:04

7

一些重要事项,或至少把一些分布信息在一个地方 - 与StringComparer关于上面的尖端等在:

if (array.Contains("str", StringComparer.OrdinalIgnoreCase)) 
{} 
  1. array.Contains()是一种LINQ扩展方法,因此仅适用于.NET 3.5或更高版本的标准。

  2. 但是:在.NET 2.0简单Contains()方法(不考虑不区分大小写考虑)是至少可以像这样,具有铸造:

    if (((IList<string>)mydotNet2Array).Contains(“str”)) {}

  3. 加成1:对于上面给出的原因,在StringComparer 1.用以下命名空间夹杂物仅作品(在.NET 3.5测试):

    using System;

    using System.Linq;

  4. 除了2 .:的Contains()方法不仅使用数组,它也列出了适用:-)

相关问题