Почему изменение 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

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