指数超出范围。必须是非负数且小于集合的大小
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 个或更多字符的字符串。
如果您能提供更多关于您正在尝试做的事情的详细信息,我们可以为您提供进一步的帮助。
【讨论】:
以上是关于指数超出范围。必须是非负数且小于集合的大小的主要内容,如果未能解决你的问题,请参考以下文章