You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何未调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:20:35