指数超出范围。必须是非负数且小于集合的大小

Posted

技术标签:

【中文标题】指数超出范围。必须是非负数且小于集合的大小【英文标题】:Index was out of range. Must be non-negative and less than the size of the collection 【发布时间】:2012-02-11 17:13:17 【问题描述】:

我有这个代码:

ArrayList list = new ArrayList();
foreach (DataRow dataR in prenume.Rows)

    foreach (var item in dataR.ItemArray)
    
        if (item.Equals("  ")) continue;
        list.Add(item);
        if (input_string.Equals(item.ToString()) && list.Count > 0 )
        
            label_hello.Text = "Hello, " + list[2];
        
    

当我试图清除显示的文本时,我收到一条错误消息:

索引超出范围。必须是非负数且小于大小 集合。

后期编辑:

        Solution found!I was too tired ... sorry for the question!

【问题讨论】:

【参考方案1】:

好吧,你从一个空列表开始,然后在添加一个项目后,你可能会执行(如果input_string 等于第一个项目数组中的第一个项目):

label_hello.Text = "Hello, " + list[2];

这是试图访问列表中的第三个​​项。当只有一项时它会失败。为什么在这里选择2

(顺便说一句,你为什么使用ArrayList?通用的List<T>类型是首选。)

不清楚您要尝试实现什么 - 如果您能提供更多背景信息,我们就有更好的机会帮助您。

编辑:从 cmets 看来,应该是这样的

label_hello.Text = "Hello, " + dataR[2];

但是,我怀疑循环仍然不正确...为什么要迭代表中的 每个 值,而不是(比如说)仅在一列中?

【讨论】:

因为这是我要写的arraylist中的元素。 @EmilDumbazu:但是列表没有三个元素——当你第一次看到这个语句时,列表只有一个元素。那么第三个元素怎么会是你想要的呢? 当文本框中的文本更改时执行代码。而且列表中的元素与字符一样多.... @EmilDumbazu:不,它没有 - 仔细查看您的代码...您创建一个新列表(因此它是空的)并且输入字符串是否等于项目中的第一项数组,当列表只有一个元素时,它将进入该块并执行失败的语句。完全不清楚您要做什么,但这就是失败的原因。 问一个不知道如何使用数组和索引器的人你为什么不使用Generics就像问我,嗯,很多事情......【参考方案2】:

当然会报错。

label_hello.Text = "Hello, " + list[2];

错了。 在那个阶段你只有一个元素列表[0]。

【讨论】:

如果它完全按照您希望的方式工作,您为什么要问?如果你想要那个例外,你为什么要问这个? 如果您想要第二个元素,请将您的列表 [2] 放在 foreach 循环之外。【参考方案3】:

您在以下行中遇到错误

label_hello.Text = "Hello, " + list[2];

您收到该错误的原因是因为没有列表[2]

现在,我无法准确说出您要做什么,但我偷偷怀疑您打算将“项目”作为某种字符串,并且您想访问该字符串中的第三个字符.

即便如此,请记住,有时用户可能会尝试输入长度不是 3 个或更多字符的字符串。

如果您能提供更多关于您正在尝试做的事情的详细信息,我们可以为您提供进一步的帮助。

【讨论】:

以上是关于指数超出范围。必须是非负数且小于集合的大小的主要内容,如果未能解决你的问题,请参考以下文章

指数超出范围。必须是非负数且小于集合的大小

指数超出范围。必须是非负数且小于集合的大小。参数名称:索引

指数超出范围。必须是非负数且小于集合的大小。参数名称:索引

错误索引超出范围。必须是非负数且小于集合的大小

指数超出范围。必须为非负数且小于集合参数 name:index 的大小

错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:索引