C#中这段for循环代码为什么会抛出索引超出范围异常?
问题原因
这段代码抛出索引越界异常的核心原因是对List<T>的用法错误,和inputStringArray的索引范围无关。
- 你通过
new List<int>()初始化的空List,实际元素个数(Count属性)为0,内部没有任何已存在的元素。List<T>的索引器只能用于访问或修改已经被添加到集合中的元素,不能直接给不存在的索引位置赋值。 - 循环中执行
listOfNumbers[i]时,i从0开始取值,但此时List中没有任何元素,直接触发ArgumentOutOfRangeException异常。
修复方案
方案1:使用Add方法追加元素(最常用)
List默认通过Add方法往集合末尾追加元素,修改循环逻辑即可:
for (int i = 0; i < inputStringArray.Length; i++) { listOfNumbers.Add(Convert.ToInt32(inputStringArray[i])); }
也可以直接用LINQ简化写法:
var listOfNumbers = inputStringArray.Select(Convert.ToInt32).ToList();
方案2:初始化时填充默认值后用索引赋值
如果确实需要用索引赋值的写法,可以在初始化List时就指定长度并填充默认值,保证List的元素个数和inputStringArray一致:
var listOfNumbers = new List<int>(new int[inputStringArray.Length]); for (int i = 0; i < inputStringArray.Length; i++) { listOfNumbers[i] = Convert.ToInt32(inputStringArray[i]); }
额外注意事项
当前代码没有做输入合法性校验,如果用户输入的内容不是合法整数,Convert.ToInt32会抛出格式异常,建议使用int.TryParse做校验,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Alex M
相关产品推荐
相关产品推荐

