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
相关产品推荐
相关产品推荐

