🧩
Разбор задачи
Правильный ответ:
Будет выброшен InvalidOperationExceptionМногие ожидают, что новый элемент просто добавится в список и цикл продолжит работу. Но внутри foreach используется Enumerator, который запоминает версию коллекции на момент начала обхода.
После выполнения:
users.Add(4);
версия списка изменяется.
➡️ При следующем вызове MoveNext() Enumerator обнаруживает, что коллекция была изменена после начала обхода, и выбрасывает исключение:
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
❕ Исключение возникает не в момент Add(), а при попытке перейти к следующему элементу коллекции.
Например, такой код:
{
Console.WriteLine(user);
if (user == 2)
users.Add(4);
}
успеет вывести:
1
2
и только после этого завершится с ошибкой.
💡 Это поведение характерно не только для List<T>, но и для большинства коллекций .NET, включая Dictionary<TKey, TValue>, HashSet<T> и другие.
Если во время обхода нужно изменять коллекцию, используйте цикл for, работайте с копией через ToList() или накапливайте изменения отдельно.
📍 Навигация:
Вакансии • Задачи •
Собесы🐸
Библиотека шарписта#dotnet_challenge