什么是“索引超出范围”异常,如何解决? - c#

我收到以下错误之一:

“索引超出范围。必须为非负数并且小于集合的大小”
“插入索引超出范围。必须为非负数,并且小于或等于大小。”
“指数数组的边界之外。”

这是什么意思,我该如何解决?

也可以看看
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。”我浏览了…