2012-01-16 55 views
2

我有这样的代码:指数超出范围。必须为非负且小于集合的大小

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

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

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

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

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

目前尚不清楚你在做什么试图实现 - 如果你可以给我们更多的情况下,我们有更好的帮助你的机会。

编辑:从评论,它看起来像这应该是

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

不过,我怀疑的循环仍然没有正确的...为什么你要在表格上遍历每个值,而不是(只)在一列中?

+0

因为这是我想编写的arraylist的元素。 – 2012-01-16 19:57:45

+0

@EmilDumbazu:但是该列表不包含*三个元素 - 第一次进入此语句时,该列表将只包含一个元素。那么第三个元素怎么能成为你想要的呢? – 2012-01-16 19:58:41

+0

代码在文本框中的文本发生更改时执行。并且该列表具有与字符一样多的元素.... – 2012-01-16 20:05:47

2

当然它会给出错误。

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

是错误的。 您在该阶段只有一个元素列表[0]。

+0

我明白了......但是我的工作方式正是如此。 – 2012-01-16 20:01:11

+3

如果它的工作原理完全符合你的要求,你为什么要问?如果你想*这个例外,你为什么要问这个问题? – 2012-01-16 20:12:03

+1

+1简介**?!**答案... – gdoron 2012-01-16 20:16:51

1

你得到下一行的错误

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

为什么你得到这个错误的原因是因为没有列表[2]

现在,我不能告诉正是你想要做的,但我有一个鬼鬼祟祟的怀疑,你打算'项目'是某种类型的字符串,并且你想访问该字符串中的第三个字符。

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

如果您可以提供更多关于您要做什么的详细信息,我们可以为您提供更多帮助。

+0

我解决了这个问题。谢谢。 – 2012-01-16 20:27:16

相关问题