2009-06-04 108 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()方法不僅使用數組,它也列出了適用:-)

相關問題