TGViewer
C# (C Sharp) programming C# (C Sharp) programming @csharp_ci · 18.1K subscribers
Post #1406 5.25K
🧠 C#‑задача с подвохом: как работает `foreach` на изменяемой коллекции?

Представим, у нас есть такой код:


List<int> numbers = new List<int> { 1, 2, 3, 4 };

foreach (var n in numbers)
{
Console.WriteLine(n);
if (n == 2)
numbers.Remove(n); // 😬
}


❓ Вопрос: Что произойдёт при запуске?


🔍 Разбор

На первый взгляд — ничего особенного. Но при запуске вы получите:


1
2
Unhandled exception. System.InvalidOperationException:
Collection was modified; enumeration operation may not execute.


💣 Почему так? Потому что `foreach` в C# использует **итератор (Enumerator)**, который **не допускает изменений коллекции во время прохода**. Это встроенная защита от непредсказуемых багов и гонок.

✅ Как можно обойти?

Вариант 1 — использовать for вместо foreach:


for (int i = 0; i < numbers.Count; i++)
{
if (numbers[i] == 2)
{
numbers.RemoveAt(i);
i--; // ⚠️ Обязательно откатить индекс!
}
}


Вариант 2 — создать копию коллекции:


foreach (var n in numbers.ToList())
{
if (n == 2)
numbers.Remove(n);
}


🧠 Вывод:

В C# `foreach` нельзя использовать на коллекциях, которые вы планируете менять в теле цикла. Это распространённая ловушка даже для опытных разработчиков.

📎 Советы:
- При изменениях — лучше for или .ToList()
- Внимательно читайте исключения: InvalidOperationException — ваш друг в отладке

Поделитесь с коллегами — пусть никто не попадается 😊

@csharp_ci
More from @csharp_ci
  1. Oct 6, 2026🛠 Вышел Microsoft.Data.SqlClient 7.1.1 Обновление .NET-драйвера для SQL Server исправляет…
  2. Oct 5, 2026Одна задача, три языка: Rust, C# или C++? В курсе Google *Comprehensive Rust* есть упражне…
  3. Oct 5, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  4. Oct 4, 2026🖥 .NET 10 научился класть объекты на стек: escape analysis в JIT Одна из самых полезных о…
  5. Oct 3, 2026Самый неожиданный кандидат на звание самого быстрого JSON-сериализатора для .NET сейчас де…
  6. Oct 2, 2026Post #1891
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →