2009-10-07 102 views
18

我需要區分大小寫的列表或集合的集合類型(字符串)。創建一個最簡單的方法是什麼?你可以指定你想獲得一個詞典的按鍵比較的類型,但我不能找到一個列表類似的事情。不區分大小寫的列表

回答

3

看起來像它可以充分利用KeyedCollection類:

public class Set<T> : KeyedCollection<T,T> 
{ 
    public Set() 
    {} 

    public Set(IEqualityComparer<T> comparer) : base(comparer) 
    {} 

    public Set(IEnumerable<T> collection) 
    { 
     foreach (T elem in collection) 
     { 
      Add(elem); 
     } 
    } 

    protected override T GetKeyForItem(T item) 
    { 
     return item; 
    } 
} 
31

假設你正在使用.NET 3.5,你可以用:

var strings = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase); 

...或類似的東西,在那裏你會選擇適當的文化背景,以及。

名單並沒有真正有大部分的比較的想法 - 只有當你調用IndexOf和相關方法。我不相信有任何指定比較的方法。但是,您可以使用帶謂詞的List<T>.Find

+1

我堅持與.net 2可悲的是:( – Grzenio 2009-10-07 10:48:51

2

類似的故事在這兒,希望檢查contains

例如

public static bool Contains(this string source, string toCheck, StringComparison comp) 
     { 
      return source.IndexOf(toCheck, comp) >= 0; 
     } 
20

使用LINQ,這增加了.Compare

using System.Linq; 
using System.Collections.Generic; 

List<string> MyList = new List<string>(); 

MyList.Add(...) 

if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) { 
    //found 
} 
+0

你不需要「的LINQ」使用包含方法 – 2013-07-13 06:49:03

+0

@ geo1701:但你做** **需要使用'用System.Linq'的'StringComparer'來獲得新的過載! – 2013-11-21 07:28:09

+0

謝謝,很好的答案,我希望有一個擴展,而不是寫我自己。否則我不會知道去哪裏看! – Abacus 2014-02-10 23:16:22

0
var Addresses = Pr.Where(a = >a.Key.ToUpper() == "KEY VALUE").ToList(); 

只是讓你的密鑰大寫的新方法和搜索大寫VALUE

+0

這完全是我想避免的破解。 – Grzenio 2016-05-06 08:24:54