Обновление: добавлено для полноты
Как ответили несколько человек, вы не должны изменять коллекцию при ее итерации с помощью GetEnumerator () (пример foreach
). Фреймворк мешает вам сделать это, выдав исключение. Общей формулировкой этого является итерация «вручную» с for
(см. Другие ответы). Будьте осторожны с индексом, чтобы не пропускать элементы и не переоценивать один и тот же дважды (используя i--
или итерацию в обратном направлении).
Однако для вашего конкретного случая мы можем оптимизировать операцию (и) удаления ... оригинальный ответ ниже.
Если вы хотите удалить все элементы, пока один из них не удовлетворяет заданному условию (это то, что делает ваш код), вы можете сделать это:
bool exitCondition;
while(list.Count > 0 && !(exitCondition = list[0].Condition))
list.RemoveAt(0);
Или, если вы хотите использовать одну операцию удаления:
SomeType exitCondition;
int index = list.FindIndex(i => i.Condition);
if(index < 0)
list.Clear();
else
{
exitCondition = list[0].State;
list.RemoveRange(0, count);
}
Примечание: поскольку я предполагаю, что item.Condition
равно bool
, я использую item.State
для сохранения условия выхода.
Обновление: добавлена проверка границ и сохранение условия выхода в обоих примерах