Поведение, которое вы видите, по замыслу :
оператор foreach для C #
язык (для каждого в Visual Basic)
скрывает сложность
счетчики. Поэтому, используя foreach
рекомендуется вместо прямого
манипулирование счетчиком.
Счетчики могут использоваться для чтения
данные в сборе, но они
не может быть использован для изменения
базовая коллекция.
Запуск события, которое выполняется синхронно, имеет тот же эффект, что и изменение коллекции из цикла foreach
.
Я предпочитаю использовать цикл for
в обратном направлении, это позволяет избежать условной логики обновления индекса цикла в зависимости от того, вставляете ли вы что-то:
for (var i = collection.Count - 1; i >= 0; i--) {
if (condition)
collection.Insert(i, item);
}
Соответствующий инкрементный цикл будет выглядеть примерно так:
for (var i = 0; i < collection.Count; i++) {
if (condition) {
collection.Insert(i, item);
i++;
}
}