2009-10-07 10 views
18

大文字小文字を区別しないリストやコレクションの種類(文字列)が必要です。作成する最も簡単な方法は何ですか?あなたは辞書のキーを取得する比較の種類を指定することができますが、Listと同様のものは見つかりません。大文字と小文字を区別しないリスト

答えて

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 with( – Grzenio

2

似たような話はどこ例えばcontains

をチェックするために探して

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

使用LINQの、これはちょうどあなたのキーを大文字にする

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

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

MyList.Add(...) 

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

Containsメソッド –

+0

@ geo1701を使用するのに 'Linq'は必要ありませんが、** 'System.Linq'を使用して' StringComparer'で新しいオーバーロードを取得する必要があります! –

+0

ありがとう、良い答え、私は自分自身を書く必要がなく、拡張があることを望んでいました。さもなければ私はどこを見るべきか分からなかったでしょう! – Abacus

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

を.Compareするための新しい方法が追加されます検索大文字の値

+0

これは私が避けたかったハックです。 – Grzenio

関連する問題