Rob*_*vey 20 .net c# indexoutofrangeexception
我收到以下错误之一:
它是什么意思,我该如何解决?
Rob*_*vey 35
因为您尝试使用超出集合边界的数字索引来访问集合中的元素.
集合中的第一个元素通常位于索引处0.最后一个元素是index n-1,其中n是Size集合的元素(它包含的元素数).如果您尝试使用负数作为索引,或者使用大于的数字,则会Size-1出现错误.
当您声明这样的数组时:
var array = new int[6]
Run Code Online (Sandbox Code Playgroud)
数组中的第一个和最后一个元素是
var firstElement = array[0];
var lastElement = array[5];
Run Code Online (Sandbox Code Playgroud)
所以当你写:
var element = array[5];
Run Code Online (Sandbox Code Playgroud)
您正在检索数组中的第六个元素,而不是第五个元素.
通常,您将循环遍历数组,如下所示:
for (int index = 0; index < array.Length; index++)
{
Console.WriteLine(array[index]);
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为循环从零开始,结束于Length-1因为index不再小于Length.
但是,这将抛出异常:
for (int index = 0; index <= array.Length; index++)
{
Console.WriteLine(array[index]);
}
Run Code Online (Sandbox Code Playgroud)
注意<=那里? index现在将在最后一个循环迭代中超出范围,因为循环认为这Length是一个有效的索引,但事实并非如此.
列表以相同的方式工作,除了您通常使用Count而不是Length.他们仍然从0开始,最后结束Count - 1.
for (int index = 0; i < list.Count; index++)
{
Console.WriteLine(list[index]);
}
Run Code Online (Sandbox Code Playgroud)
但是,您也可以使用列表迭代foreach,避免完全索引的整个问题:
foreach (var element in list)
{
Console.WriteLine(element.ToString());
}
Run Code Online (Sandbox Code Playgroud)
您无法索引尚未添加到集合的元素.
var list = new List<string>();
list.Add("Zero");
list.Add("One");
list.Add("Two");
Console.WriteLine(list[3]); // Throws exception.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159833 次 |
| 最近记录: |