为何未调用Add方法无法访问List索引元素?指定容量List报错解析
C# List常见问题解答
问题1:为何未调用Add方法就无法通过索引访问List的元素?
C#的List<T>要区分两个核心属性:
- Capacity:是List内部存储元素的数组长度,决定了List在扩容前能容纳的最大元素数。
- Count:是List中实际存在的元素数量,这才是索引访问的判断依据。
刚创建的List(哪怕指定了初始Capacity),Count值为0,说明里面没有任何实际元素。索引访问(比如list[0])要求索引必须满足0 <= index < Count,所以此时不管Capacity多大,直接用索引访问都会报错。必须先通过Add、Insert等方法添加元素,让Count增长到对应数值,才能用对应索引访问元素。
问题2:为何指定初始容量的C#程序运行报错?
报错代码
List<int> list = new List<int>(2); list[0] = 1; Console.WriteLine(list[0]);
报错信息(翻译后)
System.ArgumentOutOfRangeException:“索引超出范围。必须为非负值且小于集合大小。
参数名: index”
原因解释
这段代码里new List<int>(2)只是设置了List的初始容量为2——也就是内部用来存元素的数组长度是2,但此时List的Count仍然是0,没有任何实际元素。执行list[0] = 1时,因为索引0并不小于Count(0),不符合合法索引的要求,所以抛出ArgumentOutOfRangeException。
如果要给指定位置赋值,有几种解决方式:
- 先调用
Add方法添加元素,比如先list.Add(0),再修改list[0] = 1; - 直接用
Insert(0, 1)在索引0的位置插入元素; - 如果需要固定大小的集合,也可以考虑使用数组(比如
int[] arr = new int[2]; arr[0] = 1;),数组创建时就确定了长度,每个位置默认有对应类型的默认值。
内容的提问来源于stack exchange,提问作者veljan
相关产品推荐
相关产品推荐

