List クラスは、ArrayList クラスとジェネリックに等価です。このクラスは、必要に応じてサイズが動的に増加する配列を使用して、IList ジェネリック インターフェイスを実装します。
List クラスは、等値比較演算子と順序比較演算子の両方を使用します。
List が並べ替えられることは保証されていません。List を並べ替える必要のある操作 (BinarySearch など) を実行する前に、List を並べ替える必要があります。
このコレクション内の要素は、整数インデックスを使用してアクセスできます。このコレクションのインデックスは 0 から始まります。
List は、null 参照 (Visual Basic では Nothing) を参照型に対して有効な値として受け取り、要素の重複を許可します。
パフォーマンスに関する考慮事項
List クラスまたは ArrayList クラスのどちらを使用するかを決定する場合、両者の機能は類似していますが、List クラスは通常パフォーマンスが優れており、タイプ セーフであることも考慮してください。List クラスの型 T で参照型が使用される場合、2 つのクラスの動作は同じです。ただし、型 T で値型が使用される場合、実装とボックス化の実行を検討する必要があります。
型 T で値型が使用される場合、コンパイラはその値型のために List クラスの実装を生成します。つまり、List オブジェクトのリスト要素は、その要素が使用できるまでボックス化する必要はありません。約 500 のリスト要素が作成されると、ボックス化しないリスト要素が保存されたメモリは、そのクラス実装を生成するために使用されたメモリよりも大きくなります。
型 T で使用される値型が、IEquatable ジェネリック インターフェイスを実装していることを確認します。実装していない場合、Contains などのメソッドは、影響を受けるリスト要素をボックス化する Object.Equals(Object) メソッドを呼び出す必要があります。値型が IComparable インターフェイスを実装している場合、ソース コードを所有していれば、IComparable ジェネリック インターフェイスも実装して BinarySearch メソッドと Sort メソッドがリスト要素をボックス化しないようにします。ソース コードを所有していない場合は、IComparer オブジェクトを BinarySearch メソッドと Sort メソッドに渡します。
ArrayList クラスを使用したり、厳密に型指定されたラッパーのコレクションを独自に記述したりする代わりに、List クラスの型固有の実装を使用することには利点があります。その理由は、独自の実装では、既に .NET Framework が行っている動作を実行する必要があることです。また、共通言語ランタイムは MSIL (Microsoft Intermediate Language) コードとメタデータを共有できますが、独自の実装ではできないことも理由です。