Поговорим про изменение коллекции во время итераций без возможных ошибок



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



Давайте разберемся, как избежать этой ошибки:

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

foreach (var number in list){

if (number == 2){

list.Remove(number); // Ошибка: InvalidOperationException

}

}




Чтобы безопасно изменять коллекцию во время итерации, используйте метод RemoveAll, который позволяет работать с коллекцией без изменения её структуры во время обхода:

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

list.RemoveAll(x => x == 2); // Правильный способ




Еще одно решение — использовать цикл for вместо foreach. В этом случае можно контролировать индексы и безопасно изменять коллекцию:

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

for (int i = 0; i < list.Count; i++){

if (list[i] == 2){

list.RemoveAt(i); // Удаление элемента по индексу

i--; // Уменьшаем индекс после удаления

}

}




Жми 🔥 если понравился пост и делись своим мнением в комментариях!




➡️ C# Ready | #практика