|
Модераторы: Partizan, gambit |
|
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Хочу удалить из ObservableCollection некоторые элементы, но такой код не работает
Ошибка такая System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.InvalidOperationException: Коллекция была изменена; невозможно выполнить операцию перечисления. at System.RuntimeMethodHandle.InvokeMethodFast Как лучше сделать? |
|||
|
||||
Суровый |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.4.2009 Репутация: 1 Всего: 2 |
Можно попробовать начинать каждый раз поиск заново:
Добавлено через 2 минуты и 37 секунд Второй способ - копирование всех "подходящих элементов":
Это сообщение отредактировал(а) Суровый - 29.7.2011, 14:01 |
||||||
|
|||||||
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
в первом случае ,если до первого объекта, который нужно удалить, много объектов, то эта чистка будет выполнятся медленно.
Я не уверен в работоспособности второго вариата. Если мы делаем Add(), то ведь НЕ создается комия добавляамеого объекта? Если не создается, а лишь копируется ссылка, то после "копирования", у меня старая коллекция повиснет в памяти без имени, но чистильшик не удали её т.к. есть ссылки указывающие на неё. Получается памячть будет загромождатся. |
|||
|
||||
AlexNagits |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.7.2011 Репутация: нет Всего: нет |
Суровый,
Stas123, обычно делают так:
Если выглядит громоздко, то можно использовать linq, например так:
|
||||
|
|||||
CYBERDREAM |
|
|||
I think, there4 I am Профиль Группа: Завсегдатай Сообщений: 1096 Регистрация: 31.10.2006 Где: CyberLand Репутация: 11 Всего: 28 |
Надеюсь ты понял, что в теле foreach коллецию нельзя изменять?
Можно сделать через цикл for. В этом случае можно обойтись без всяких лишних коллекций
-------------------- Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно) Telegram, skype: kuchuk.artiom |
|||
|
||||
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
CYBERDREAM, сделал почти также как во втором варианте.
|
|||
|
||||
CYBERDREAM |
|
||||
I think, there4 I am Профиль Группа: Завсегдатай Сообщений: 1096 Регистрация: 31.10.2006 Где: CyberLand Репутация: 11 Всего: 28 |
разве нельзя записать как
Orders какого типа? Это сообщение отредактировал(а) CYBERDREAM - 1.8.2011, 13:48 -------------------- Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно) Telegram, skype: kuchuk.artiom |
||||
|
|||||
Exception |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Коллекцию нельзя менять, пока ты по ней бегаешь.
Используй LINQ.
Обрати внимание на вызов ToList: список на удаление вычисляется отдельно, поэтому ошибки не возникает. Добавлено @ 00:14 В оп-посте написано: Orders это ObservableCollection. Этот вариант близок к правде, но от тоже меняет коллекцию на ходу. Ты как бы выдираешь почку из-под ног у Where. Это сообщение отредактировал(а) Exception - 2.8.2011, 00:15 |
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |