我收到以下错误之一:
“索引超出范围。必须为非负数并且小于集合的大小”
“插入索引超出范围。必须为非负数,并且小于或等于大小。”
“指数数组的边界之外。”
这是什么意思,我该如何解决?
也可以看看
IndexOutOfRangeException
ArgumentOutOfRangeException
参考方案
为什么会发生此错误?
因为您尝试访问集合中的元素,所以使用了超出集合边界的数字索引。
集合中的第一个元素通常位于索引0
。最后一个元素在索引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.
如何使用ASP.NET ViewState使用JavaScript - c#我的页面中有UL,它为空。我开始使用JavaScript使用LI填充它。在回发阶段如何在asp.net中使用此新添加的动态数据?那是因为我的提交按钮是asp.net控件。我不想使用JS POST。谢谢 参考方案 我过去通过在隐藏字段中填充要发布的动态数据来完成此类操作,您可以-在回传之前触发JavaScript事件,该事件将数据从UL解析到隐藏字段中要么更新…
如何从.Net DLL获取公共出口列表? - c#我可以使用“ dumpbin”和“ dll export”之类的工具来查看标准win32 DLL的公共入口点(“ exports”),例如Windows \ SYSTEM32 \ GDI32.dll。但是,当我在.Net DLL上使用这些相同的工具时,我看到的仅仅是 2000 .reloc 2000 .rsrc 48000 .text 我有一个C#/。Net…
将asp.net c#变量分配给javascript数组 - c#我有2个工作部分的代码,需要将它们放在一起第1节-用户可以访问页面,查看和编辑数据库的内容,其中包括新闻文章,标题,相关链接等,我设法使其正常工作并将数据保存到数据库中第2条-该网站首页上的javascript新闻滚动器会写出一系列div,然后使用javascript和CSS对其进行旋转,使其看起来像在滚动,同样可以。新闻文章是从首页上硬编码的数组中提取的问…
asp.net mvc或javascript将另一页的结果返回给方法 - c#是否可以将另一个页面的结果返回给JavaScript方法或C#控制器操作?我有一个共享的复杂页面,该页面在我的网站上遍布使用,当前用于在C#后端的用户数据上设置单个变量。当用户完成共享的复杂页面后,我将返回引用页面。当用户在刷新或返回时将其作为url参数传递给返回的页面时,我返回的页面包含新选择的变量。我有一个新页面,我希望从我的共享复杂页面中返回该变量。但…
如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…