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

C#更新sumList报索引超出范围错误,如何实现逐行更新总和功能

错误根因
  • 第一次触发报错的核心是:你直接通过sumList[i]访问元素时,i的取值大于等于sumList的当前长度。C#的List<T>不支持自动扩充索引位,未提前给对应索引位初始化默认值就直接访问,就会触发索引越界。
  • 替换为Add方法后仍报错的核心是:报错触发点并非Add操作本身,而是参数里的sumlist[i]访问逻辑和第一次完全一致,i依然超出sumList的现有长度,所以会抛出相同错误。
额外注意事项
  • C#是大小写敏感的编程语言,你代码中出现的sumList和sumlist是两个完全不同的变量,实际开发中需要保证变量名拼写、大小写完全一致,避免触发额外的编译或运行错误。
逐行更新总和的解决方案

根据你的业务场景选择对应方案即可:

场景1:按指定索引位累计对应位置的总和(即需要修改sumList第i位的已有值)

方案A:提前初始化集合长度

如果你能提前确定sumList需要的总长度,遍历前先填充默认值:

// 替换为你实际需要的sumList总长度,数值类型根据业务自行调整
int expectedLength = 20;
sumList = new List<double>(expectedLength);
for (int k = 0; k < expectedLength; k++)
{
    sumList.Add(0);
}
// 后续可直接按索引修改值,不会触发越界
sumList[i] += formula3[j];

方案B:动态补位适配未知长度

如果无法提前确定总长度,每次访问前先判断索引是否存在,不存在就补默认值:

// 访问索引前先补位到i对应的位置
while (i >= sumList.Count)
{
    sumList.Add(0);
}
sumList[i] += formula3[j];

场景2:每次累加结果新增到集合末尾(不需要修改已有索引位的值)

如果你是要将累计的结果追加到sumList末尾,不需要用到i参数访问已有元素,直接取最后一位计算即可:

if (sumList.Count == 0)
{
    // 集合为空时插入第一个初始值
    sumList.Add(formula3[j]);
}
else
{
    // 取最后一位的值累加后追加到末尾
    sumList.Add(sumList.Last() + formula3[j]);
}

内容的提问来源于stack exchange,提问作者chicacherry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:03