Почему этот цикл генерирует ошибку 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
быть больше, чем последний возможный индекс