Почему этот цикл генерирует ошибку System.ArgumentOutOfRangeException, а не завершается?

Почему мой цикл не может закончиться? Почему вместо этого выдается исключение?

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");
    }
}

Примечание об ошибке: необработанное исключение типа 'System.ArgumentOutOfRangeException' произошло в mscorlib.dll

Дополнительная информация: индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции.

Как я могу это исправить, пожалуйста?

1 ответ

Решение

+ Изменить

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

к

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

С индексом на основе 0 последний индекс меньше значения, возвращаемого item.Count
В вашем случае последний цикл попытается найти элемент с индексом, которого нет в массиве

изменения <= item.Count в < item.Count помешает значение i быть больше, чем последний возможный индекс

Другие вопросы по тегам