为什么这个循环抛出System.ArgumentOutOfRangeException错误,而不是结束?

时间:2015-05-23 16:28:00

标签: c# loops arraylist contains

为什么我的循环无法结束?为什么会引发异常?

int i=0;

ArrayList item = new ArrayList();
ArrayList list = new ArrayList();

while (reader.Read())
{
    item.Add(reader["element"].ToString());//keep data from my SQL
}

string chk2 = textBox1.Text.ToString();

for ( i = 0; i <= item.Count;i++ )
{
    if ((item[i].ToString()).Contains(chk2) )//this line got error.
    {
        list.Add(item[i]);
        MessageBox.Show(item[i].ToString());
    }
    else
    {
        MessageBox.Show("Not Found");
    }
}

错误提示:未处理的类型&#39; System.ArgumentOutOfRangeException&#39;发生在mscorlib.dll

其他信息:指数超出范围。必须是非负数且小于集合的大小。

我该如何解决?

1 个答案:

答案 0 :(得分:4)

更改

for ( i = 0; i <= item.Count;i++ )

for ( i = 0; i < item.Count;i++ )

基于0的索引最后一个索引小于item.Count返回的值 在你的情况下,最后一个循环将尝试查找具有索引的项目,该项目不存在于数组

<= item.Count更改为< item.Count会阻止i的值超过最后可能的索引