Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Проблема с обходом и удалением из коллекции |
Автор: Stas123 29.7.2011, 13:39 | ||
Хочу удалить из ObservableCollection некоторые элементы, но такой код не работает
Ошибка такая System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.InvalidOperationException: Коллекция была изменена; невозможно выполнить операцию перечисления. at System.RuntimeMethodHandle.InvokeMethodFast Как лучше сделать? |
Автор: Суровый 29.7.2011, 14:01 | ||||||
Можно попробовать начинать каждый раз поиск заново:
Добавлено через 2 минуты и 37 секунд Второй способ - копирование всех "подходящих элементов":
|
Автор: Stas123 29.7.2011, 14:58 |
в первом случае ,если до первого объекта, который нужно удалить, много объектов, то эта чистка будет выполнятся медленно. Я не уверен в работоспособности второго вариата. Если мы делаем Add(), то ведь НЕ создается комия добавляамеого объекта? Если не создается, а лишь копируется ссылка, то после "копирования", у меня старая коллекция повиснет в памяти без имени, но чистильшик не удали её т.к. есть ссылки указывающие на неё. Получается памячть будет загромождатся. |
Автор: AlexNagits 29.7.2011, 16:35 | ||||
Суровый, ![]() Stas123, обычно делают так:
Если выглядит громоздко, то можно использовать linq, например так:
|
Автор: CYBERDREAM 1.8.2011, 12:05 | ||
Надеюсь ты понял, что в теле foreach коллецию нельзя изменять? Можно сделать через цикл for. В этом случае можно обойтись без всяких лишних коллекций
|
Автор: Stas123 1.8.2011, 13:37 | ||
CYBERDREAM, сделал почти также как во втором варианте.
|
Автор: CYBERDREAM 1.8.2011, 13:48 | ||||
разве нельзя записать как
Orders какого типа? |