Listは要素の数は可変ですが、現在の要素数(Count)を超えるインデックスを指定した場合は例外ArgumentOutOfRangeExceptionがスローされます。 例えば、次のコードのように現在の要素数よりも大きなインデックスを指定しても、その分の容量が自動的に確保されるわけではない点に注意してください。

JavaScript等では認められているこのような操作は、Listクラスでは行うことはできない
var arr = new Array();

arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[99] = 99; // arr.length = 100

Listにおける容量の自動的な拡張は、Addメソッドなどによって要素が追加・挿入される場合にのみ行われます。 従って、上記のように現在の要素数よりも大きいインデックスに要素を格納したい場合は、Addメソッドを使って必要な要素数になるまで適当な値の追加を繰り返す必要があります。

あるいは、あらかじめ必要な要素数を確保した配列を用意してからそれをもとにListを作成する、といった方法を取ることもできます。 次の例では、全要素数が100の配列を用意してからListを作成しています。

配列を使ってListに指定した要素数を確保する
using System;
using System.Collections.Generic;

class Sample {
  static void Main()
  {
    // 全要素数が100の配列を作成する
    var arr = new int[100];

    // 配列からListを作成する
    var list = new List<int>(arr);

    // インデックス99の要素に値を設定する
    // (インデックスはListの元になった配列の全要素数の範囲内なので例外はスローされない)
    list[99] = 99;
  }
}

上記の例では、元になる配列arrと、それをもとに作成するlistの二つで個別にインスタンスが確保されている点に注意してください。

Listの要素数・容量に関して、後述の§.容量も合わせて参照してください。