首先要知道,
出现该错误的原因是因为访问了集合中不存在的值。
打个很简单的比如:
例如现在声明了一个List<int >对象,并且向其中插入两条数据。那么它的下标只能是从0到1,我们通过下标访问List<int >中的值时,List[0],List[1]都不会有错,但从List[2]开始就会报"
索引超出范围。必须为非负值并小于集合大小的解决方法"的错误了,因为List<int >对象中只有两个值,而你要从中取出第三个甚至更多的值来,当然就会报错了。
示例:
using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Data;
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
List<int > list = new List<int >(); 声明一个List<int >集合
protected void Page_Load(object sender, EventArgs e)
{
//往集合中插入两条数据
list.Add(100);
list.Add(200);
}
protected void Button1_Click(object sender, EventArgs e)
{
//开始访问集合中的值
Response.Write(list[0].ToString());//不会出错
Response.Write(list[1].ToString());//不会出错
Response.Write(list[2].ToString());//会报索引超出范围的错误,错误提示如下:
}
}
}
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
总结:
1,在应用程序中出现该错误时,我们就要想到是因为我们访问了不存在的集合值,最可能的原因是使用了集合的最大的索引值来访问集合值。比如我们在删除了某值后再来访问它,就会报出上面的错误了。
2,出现该错误另一个可能性,声明了集合后,并没有往集合中插入值就访问集合中的值了。
3,没有搞明白,集合的索引是从0开始的,也就是说如果集合中有i个值,那么list[0]是集合中的第一个值,list[i-1]就已经是集合中最后一个值了,list[i]就已经超出了集合的范围。O/fb颯齹O眰儚\剉鰁魰籗f[`NC