Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2014, 21:40   #1
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию Во время перечисления из коллекции нельзя удалять не нужные элементы?

Привожу код. Неактивный снаряд удаляется из коллекции. Но возникает ошибка.
Код:
        private void timer1_Tick(object sender, EventArgs e)
        {

            graphica.DrawImage((Bitmap)fon1.Image, new Point(0, 0));
            graphica.DrawImage((Bitmap)ship1.Image, new Point(shipX, shipY));
            //draw bullets

            foreach (Bullet b in bullets) 
            {
                if (b.active)
                {
                    b.Update();
                    graphica.DrawImage((Bitmap)bullet1.Image, new Point( b.px - bullet1.Width / 2, b.py - bullet1.Height /2));
                }
                else 
                {
                    bullets.Remove(b);
                }
            }
Цитата:
Additional information: Коллекция была изменена; невозможно выполнить операцию перечисления.
а как тогда удалять не нужное?
IT-Lopata вне форума Ответить с цитированием
Старый 28.03.2014, 21:46   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Вариант 1: использовать цикл for вместо foreach (возможно быстрее)
Вариант 2: создать временную коллекцию, в которую помещать ненужные элементы, а после foreach'a - отдельным циклом все ненужные из основной коллекции удалить (возможно медленнее)
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 28.03.2014 в 21:50.
Luuzuk вне форума Ответить с цитированием
Старый 28.03.2014, 22:10   #3
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию

сделал 1й. рабоатет, добавил индикатор количества активных снарядов.


А вообще какой самый быстрый способ хранить кучу однотипных объектов, при этом добавлять и удалять их?
IT-Lopata вне форума Ответить с цитированием
Старый 28.03.2014, 22:34   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Универсальный ответ сложно дать. Думаю, в вашем случае можно обойтись обычным List<T>. Вместо классов также можно использовать структуры, это зачастую дает прирост быстродействия. Если элементы коллекции часто добавляются/удаляются, то может иметь смысл добавить объектный пул (на хабре как-то была статья)
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
однонаправленный список, в котором можно добавлять элементы, удалять их по номеру, а в конце программы должна быть очистка динамич MNOPRST Паскаль, Turbo Pascal, PascalABC.NET 1 08.12.2013 21:48
ENUM-перечисления.Вовпрос? Goody Общие вопросы C/C++ 5 18.04.2012 01:44
Как в матрице перемножить именно нужные элементы? Npwas Помощь студентам 4 21.11.2011 04:51
Перечисления в классах (С++) Александр Елис Помощь студентам 1 22.01.2010 17:10
Как удалять элементы массива в Паскале? Антонова Анна Помощь студентам 2 08.12.2007 17:01