C# List<T>

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

C# List<T>

Сообщение noseeevil 12 апр 2013, 16:02

доброго времени суток, сделал небольшой прототип инвентаря элементы(итемы) которого хранятся в структуре данных - Список(List), во время динамического использования инвентаря элементы в списке нужно удалять(.Remove) и добавлять заново(.Add) , так вот проблема в том что для вывода элементов я использую цикл foreach в котором перебираю все элементы списка и вывожу их на экран, если я удаляю какой-то элемент то цикл не может работать корректно и выдается ошибка "InvalidOperationException: Collection was modified; enumeration operation may not execute." суть ошибки я понимаю и тд, можно ли как-то обновлять что ли количество элементов списка? ну вообщем чтоб нормально работало, или нужно использовать другу структуру?
noseeevil
UNIт
 
Сообщения: 107
Зарегистрирован: 23 фев 2013, 00:46

Re: C# List<T>

Сообщение porcha 12 апр 2013, 17:54

почиатй как правильно нужно удалять элементы из list
можно ли как-то обновлять что ли количество элементов списка?
^
Count чтоли, что за чушь? Или тебе надо каждый раз перезаписывать лист?
GameDev Проект
porcha
UNITрон
 
Сообщения: 188
Зарегистрирован: 28 мар 2013, 19:47

Re: C# List<T>

Сообщение noseeevil 12 апр 2013, 18:05

porcha писал(а):почиатй как правильно нужно удалять элементы из list
можно ли как-то обновлять что ли количество элементов списка?
^
Count чтоли, что за чушь? Или тебе надо каждый раз перезаписывать лист?


а есть какой-то материал насчет правильного удаления из списка? там вроде ничего сложно нету но мало ли, ну смотри у меня в апдейте есть цикл "foreach" перебираю в нем элементы списка и вывожу в зависимости от количества элементов такое количество итемов(через гуи), + можно выкинуть итем с инвентаря(нажатием кнопки) и тогда он удаляется со списка, после такого "удаления" мне выбивает ошибку что размерность списка изменена и тд, ошибка есть но как бы все работает всеравно, как сделать чтоб не было ошибки?
noseeevil
UNIт
 
Сообщения: 107
Зарегистрирован: 23 фев 2013, 00:46

Re: C# List<T>

Сообщение waruiyume 12 апр 2013, 18:10

Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: C# List<T>

Сообщение Woolf 12 апр 2013, 21:32

Крутите цикл не foreach а через while, причем, сверху-вниз и будет вам счастье.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: C# List<T>

Сообщение Good1101 12 апр 2013, 21:45

еще один вариант, в цикле запоминать какие элементы нужно удалить, а после выполнения цикла их удалять.
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ

Re: C# List<T>

Сообщение noseeevil 12 апр 2013, 21:46

Спасибо за помощь =)
noseeevil
UNIт
 
Сообщения: 107
Зарегистрирован: 23 фев 2013, 00:46

Re: C# List<T>

Сообщение AndreyMust19 13 апр 2013, 09:06

Понормальному GUI должен быть отдельно от сущности. foreach - это тот же while c GetEnumerator в старте и MoveNext() как итератор. Если цикл хоть один элемент перечисления (в вашем случае списка) изменился, то GetEnumerator нужно выполнить снова и обрабатывать перечисление заново.
Подумайте - а есть ли необходимость вырисовывать инвентарь каждый кадр, перебирая все его элементы? Ведь он очень редко меняется (порой может не менять неск. минут или часов). В вашем случае можно отключить обновление GUI инвентаря на время изменения содержимого, а после - снова включать.
Я сделал обновление через делегаты - GUI подписывается на них и Inventory вызывает делегат (Add, Remove, Replace) после изменения содержимого. А сам GUI рисуется через GUITexture и GUIText, в результате интерфейс инвентаря обновляется только когда изменилось его содержимое, не каждый кадр.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 12


cron