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

时间:2012-01-16 19:50:48

标签: c#

我有这段代码:

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!

3 个答案:

答案 0 :(得分:3)

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

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

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

(另外,为什么使用ArrayList?首选List<T>类型。)

目前还不清楚你尝试实现的目标 - 如果你能给我们更多的背景信息,我们就有更好的机会帮助你。

编辑:从评论中看,这应该是

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

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

答案 1 :(得分:2)

当然会出错。

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

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

答案 2 :(得分:1)

你在下一行收到错误

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

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

现在,我无法确切地说出你要做什么,但我有一种偷偷摸摸的怀疑,你打算'item'是某种字符串,并且你想要访问该字符串中的第三个字符。

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

如果您可以提供有关您尝试做的更多详情,我们可以为您提供进一步的帮助。