Почему изменение List внутри цикла foreach вызывает исключение в C#?C#

Место общения программистов C#
Ответить
Anonymous
 Почему изменение List внутри цикла foreach вызывает исключение в C#?

Сообщение Anonymous »

Я перебираю `List` в C# и пытаюсь удалить элементы на основе условия.

Код: Выделить всё

var numbers = new List { 1, 2, 3, 4, 5 };

foreach (var n in numbers)
{
if (n % 2 == 0)
{
numbers.Remove(n);
}
}
Во время выполнения этот код выдает исключение InvalidOperationException с сообщением:

"Коллекция была изменена; операция перечисления не может быть выполнена". Я ожидал, что цикл продолжит итерацию и удалит совпадающие элементы аналогично тому, как работает удаление элементов в цикле for. Я знаю, что использование цикла for или вызов RemoveAll работает, но я хочу понять, почему foreach конкретно не позволяет изменять коллекцию. Это поведение специфично для List или оно применимо ко всем реализациям IEnumerable?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ption-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»