Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

Как лучше исправить foreach цикл, внутри которого расширяется перебираемая коллекция?

#c_sharp #foreach


Коллекция выглядит так:
public class myList : List { }

Мне нужно повторять цикл до тех пор, пока он добавляет новые элементы:
do {
    newObjectAdded = false;
    foreach (myClass obj in myList) {
        //...
        if (some_condition) {
            myList.Add(newObj); 
            newObjectAdded = true;}
        //...
    }
} while (newObjectAdded);

После того, как в лист добавится элемент, в строке foreach (myClass obj in myList)
я получаю ошибку - коллекция была изменена, невозможно выполнить операцию перечисления.
Можно заменить foreach на цикл с итератором, но от этого обращение к объектам станет
довольно громоздким. Ещё есть вариант с заменой списка на LinkedList, но это ещё хуже,
в данном случае.
Существует ли какой-то более элегантный способ?    


Ответы

Ответ 1



Сам разобрался. Достаточно написать: foreach (myClass obj in myList.ToArray()) {

Комментариев нет:

Отправить комментарий