При этом мы должны спросить, как производится перечисление «предметов»? Это блок yield
? Использование блоков доходности может пострадать из-за спектра отложенного выполнения (т. Е. Перечислимое не готовится до тех пор, пока не будет получен доступ к перечислителю), и вы можете получить неожиданные результаты от этого.
Если предположить, что исключение выдается из перечислителя элементов, единственная причина, по которой оно будет выброшено, заключается в том, что коллекция имеет , которая была изменена. Если это не собственный класс, реализующий свой собственный перечислитель, в этом случае в нем может быть просто ошибка.
Вы отказались от многопоточной среды, поэтому я проигнорирую эту возможность.
Вы все еще получаете ошибку, если вы "понимаете" перечислимое - то есть
foreach(var item in items.ToArray())
{
//your code.
}
Бьюсь об заклад, вы этого не сделаете, а если нет, то что-то определенно изменяет ваш список предметов.
Вы можете проверить, что items
и результат вышеприведенного вызова .ToArray () (вам нужно было бы кешировать его в локальную переменную) все равно остаются в конце цикла foreach.