我收到以下错误之一:
- “索引超出范围。必须为非负数且小于集合的大小”
- “插入索引超出范围。必须为非负数且小于或等于大小。”
- “指数数组的边界之外。”
这是什么意思,我该如何解决?
我收到以下错误之一:
这是什么意思,我该如何解决?
因为您尝试使用超出集合边界的数字索引访问集合中的元素。
集合中的第一个元素通常位于 index 0
。最后一个元素位于 index n-1
,其中n
是Size
集合的 (它包含的元素数量)。如果您尝试使用负数作为索引,或大于 的数字Size-1
,您将收到错误消息。
当您声明这样的数组时:
var array = new int[6]
数组中的第一个和最后一个元素是
var firstElement = array[0];
var lastElement = array[5];
所以当你写:
var element = array[5];
您正在检索数组中的第六个元素,而不是第五个。
通常,您会像这样遍历数组:
for (int index = 0; index < array.Length; index++)
{
Console.WriteLine(array[index]);
}
这是可行的,因为循环从零开始,并在Length-1
因为index
不再小于Length
.
但是,这将引发异常:
for (int index = 0; index <= array.Length; index++)
{
Console.WriteLine(array[index]);
}
注意<=
那里? index
现在将在最后一次循环迭代中超出范围,因为循环认为这Length
是一个有效的索引,但它不是。
列表的工作方式相同,除了您通常使用Count
而不是Length
. 它们仍然从零开始,并在 结束Count - 1
。
for (int index = 0; i < list.Count; index++)
{
Console.WriteLine(list[index]);
}
但是,您也可以使用 遍历列表foreach
,从而完全避免索引的整个问题:
foreach (var element in list)
{
Console.WriteLine(element.ToString());
}
您无法索引尚未添加到集合中的元素。
var list = new List<string>();
list.Add("Zero");
list.Add("One");
list.Add("Two");
Console.WriteLine(list[3]); // Throws exception.