ジェネリック コレクションを使用する状況
通常は、ジェネリック コレクションを使用することをお勧めします。それは、タイプ セーフの利点をすぐに得られるからです。つまり、基本コレクション型から派生させて、型に固有のメンバーを実装する必要がありません。 また、コレクションの要素が値型である場合、ジェネリック コレクション型は、一般に、対応する非ジェネリック コレクション型 (および非ジェネリック基本コレクション型から派生した型) よりもパフォーマンスが優れています。これは、ジェネリックでは要素をボックス化する必要がないためです。
.NET Framework Version 4 以降を対象にしたプログラムで、複数のスレッドがコレクションに対するアイテムの追加またはアイテムの削除を同時に実行する可能性がある場合は、System.Collections.Concurrent 名前空間のジェネリック コレクション クラスを使用する必要があります。
既存のコレクション型に対応するジェネリック型を次に示します。
Dictionary<TKey, TValue> および ConcurrentDictionary<TKey, TValue> は、Hashtable に対応するジェネリック クラスです。
Collection<T> は、CollectionBase に対応するジェネリック クラスです。 Collection<T> は基本クラスとして使用できますが、CollectionBase とは異なり、抽象クラスではありません。 このため、非常に簡単に使用できます。
ReadOnlyCollection<T> は、ReadOnlyCollectionBase に対応するジェネリック クラスです。 ReadOnlyCollection<T> は抽象クラスではなく、既存の List<T> を読み取り専用のコレクションとして簡単に公開できるようにするコンストラクターを含んでいます。
Queue<T>、ConcurrentQueue<T>、Stack<T>、ConcurrentStack<T>、および SortedList<TKey, TValue> の各ジェネリック クラスは、それぞれ同じ名前を持つ非ジェネリック クラスに対応しています。
その他の型
いくつかのジェネリック コレクション型には、対応する非ジェネリック型がありません。 そのカテゴリは以下のとおりです。
LinkedList<T> は、挿入と削除の 0(1) 操作を提供する汎用のリンク リストです。
SortedDictionary<TKey, TValue> は、O (log n) の挿入および取得操作を使用して並べ替えられたディクショナリで、SortedList<TKey, TValue> の代わりに使用すると便利です。
KeyedCollection<TKey, TItem> はリストとディクショナリを混合したクラスであり、独自のキーを含むオブジェクトを格納する手段を提供します。
BlockingCollection<T> は、境界ブロッキング機能を備えたコレクション クラスを実装します。
ConcurrentBag<T> は、順序なしの要素の高速な挿入と削除を実現します。
LINQ to Objects
LINQ to Objects 機能では、オブジェクト型が System.Collections.IEnumerable インターフェイスまたは System.Collections.Generic.IEnumerable<T> インターフェイスを実装している限り、LINQ クエリを使用してメモリ内オブジェクトにアクセスできます。 LINQ クエリはデータ アクセス用の一般的なパターンです。通常、これは標準の foreach ループよりも簡潔で読みやすく、フィルター処理、並べ替え、およびグループ化機能を備えています。 さらに、LINQ クエリによってパフォーマンスを向上させることができます。 詳細については、「LINQ to Objects」および「Parallel LINQ (PLINQ)」を参照してください。
その他の機能
いくつかのジェネリック型には、非ジェネリック コレクション型には存在しない機能があります。 たとえば、非ジェネリックの ArrayList クラスに対応する List<T> クラスには、汎用デリゲートを受け入れるメソッドが多数あります。リストを検索するためのメソッドを指定できるようにする Predicate<T> デリゲート、リストの各要素に対して作用するメソッドを表す Action<T> デリゲート、型間の変換を定義できるようにする Converter<TInput, TOutput> デリゲートなどです。
List<T> クラスは、独自の IComparer<T> ジェネリック インターフェイスの実装を指定してリストの並べ替えと検索を実行できるようにします。 SortedDictionary<TKey, TValue> クラスと SortedList<TKey, TValue> クラスにも、この機能があります。 また、これらのクラスで、コレクションの作成時に比較演算子を指定できます。 同様に、Dictionary<TKey, TValue> クラスと KeyedCollection<TKey, TItem> クラスでは、独自の等値比較演算子を指定できます。