【问题标题】: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!

【问题讨论】:

    标签: c#


    【解决方案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 个或更多字符的字符串。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-15
      相关资源
      最近更新 更多