C#列表:初始化大小,为什么在.Add()之后才能使用[]访问?

这适用于数组:

int[] a = new int[10];
for (int i = 0; i < 10; i++)
{
    a[i] = i;
}

但是这会抛出带有列表的ArgumentOutOfRangeException:

List<int> a = new List<int>(10);
for (int i = 0; i < 10; i++)
{
    a[i] = i;
}

这是为什么?我以为列表在内部使用了数组.

最佳答案
您正在初始化容量,而不是大小.计数仍为零.初始化容量允许在创建列表时知道最大大小时优化内部数据结构(数组)的大小.这使内部数组保持已知大小,并在添加已知数量的元素时防止内部数组重新调整大小.

转载注明原文:C#列表:初始化大小,为什么在.Add()之后才能使用[]访问? - 代码日志