コレクション クラスの選択

コレクション クラスは、慎重に選択してください。 型の選択を誤ると、コレクションの使用が制限される可能性があります。 一般に、.NET Framework Version 1.1 を明示的に対象とする場合を除き、System.Collections 名前空間の型は使用しないでください。 ジェネリック バージョンと同時実行バージョンのコレクションは、タイプ セーフなどが向上するのでお勧めします。

次の点について検討してください。

  • 要素の値を取得した後で通常その要素が破棄される、要素が順番に並んだリストが必要かどうか。

    • この種のリストが必要で、先入れ先出し (FIFO: First In First Out) を必要とする場合は、Queue クラスまたは Queue<T> ジェネリック クラスを使用することを検討します。 後入れ先出し (LIFO: Last In First Out) を必要とする場合は、Stack クラスまたは Stack<T> ジェネリック クラスを使用することを検討します。 複数のスレッドからの安全なアクセスが必要な場合は、同時実行バージョンの ConcurrentQueue<T> および ConcurrentStack<T> を使用します。

    • 必要でない場合は、その他のコレクションの使用を検討します。

  • FIFO、LIFO、ランダムなどの特定の順序の要素にアクセスする必要があるか。

  • インデックスによって各要素にアクセスする必要があるかどうか。

  • 各要素に 1 つの値、1 つのキーと 1 つの値の組み合わせ、または 1 つのキーと複数の値の組み合わせのいずれを格納するか。

    • 1 つの値の場合は、IList インターフェイスまたは IList<T> ジェネリック インターフェイスに基づいた任意のコレクションを使用します。

    • 1 つのキーと 1 つの値の場合は、IDictionary インターフェイスまたは IDictionary<TKey, TValue> ジェネリック インターフェイスに基づいた任意のコレクションを使用します。

    • 埋め込みキーを持つ 1 つの値の場合は、KeyedCollection<TKey, TItem> ジェネリック クラスを使用します。

    • 1 つのキーと複数の値の場合は、NameValueCollection クラスを使用します。

  • 要素が格納された順序とは異なる順序で要素を並べ替える必要があるかどうか。

    • Hashtable クラスは、ハッシュ コードによって要素を並べ替えます。

    • SortedList クラスと SortedDictionary<TKey, TValue> ジェネリック クラスと SortedList<TKey, TValue> ジェネリック クラスは、IComparer インターフェイスと IComparer<T> ジェネリック インターフェイスに基づいて、キーによって要素を並べ替えます。

    • ArrayList には、IComparer の実装をパラメーターとして受け取る Sort メソッドが用意されています。 これに対応する List<T> ジェネリック クラスは、IComparer<T> ジェネリック インターフェイスの実装をパラメーターとして受け取る Sort メソッドを提供します。

  • 情報の高速な検索と取得が必要かどうか。

  • 文字列だけを受け入れるコレクションが必要かどうか。

LINQ to Objects および PLINQ

LINQ to Objects では、オブジェクト型が IEnumerable または IEnumerable<T> を実装している限り、LINQ クエリを使用してメモリ内オブジェクトにアクセスできます。 LINQ クエリはデータ アクセス用の一般的なパターンです。通常、これは標準の foreach ループよりも簡潔で読みやすく、フィルター処理、並べ替え、およびグループ化機能を備えています。 詳細については、「LINQ to Objects」を参照してください。

PLINQ は、マルチコア コンピューターをより効率的に使用することによってさまざまなシナリオでクエリ実行を高速化できる、LINQ to Objects の並列実装です。 詳細については、「Parallel LINQ (PLINQ)」を参照してください。

参照

参照

System.Collections

System.Collections.Specialized

System.Collections.Generic

その他の技術情報

コレクションの作成と操作

スレッド セーフなコレクション