Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для craftersmine
31 / 29 / 9
Регистрация: 06.06.2014
Сообщений: 373
1

Обход исключения InvalidOperationException

06.07.2018, 23:24. Показов 807. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, есть коллекция объектов, в ней могут удаляться объекты или добавляться. В коллекции всегда ведется перебор объектов. И когда во время перебора любой объект из коллекции удаляется, вызывается InvalidOperationException. Есть ли способ как-нибудь это обойти корректно? Вот код перебора объектов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
try
{
       foreach (GameObject gObj in gameWnd.CurrentScene.GameObjects)
       {
              gObj.IsCollided = false;
              gObj.CheckCollisions(gameWnd.CurrentScene.GameObjects);
       }
}
catch (InvalidOperationException)
{
       // Пустой блок. Некий костыль обхода этого исключения... Как сделать правильнее?
}
Вот код CheckCollisions()
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
internal void CheckCollisions(List<GameObject> gameObjects)
        {
            foreach (GameObject gObj in gameObjects)
            {
                if (this != gObj)
                {
                    if (this.BoundingBox.IntersectsWith(gObj.BoundingBox))
                    {
                        this.IsCollided = true;
                        this.OnCollide(gObj);
                    }
                }
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2018, 23:24
Ответы с готовыми решениями:

Исключение System.InvalidOperationException
выбрасывает когда пытаюсь по таймеру добавлять текст в текст бокс public partial class...

Чат UDP, исключение InvalidOperationException
Здравствуйте, написал чат, который запускается в 2 окна, с 1го окна отправляется сообщение на...

Исключение InvalidOperationException при XML сериализации
При выполнении вот такого кода XmlSerializer xml = new XmlSerializer(typeof(NeuralNetwork));...

Ошибка InvalidOperationException при Xml сериализации
Здравствуйте! У меня возникла проблема при xml сериализации. Суть проблемы такова, я хочу...

1
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
07.07.2018, 12:32 2
1) Если я правильно помню эта ошибка возникает из-за изменения коллекции в цикле foreach что недопустимо.
2) Код ужасен (бессмысленные обход по коллекции в которой потом вызывается на каждый объект новый обход этой же коллекции)
3) Используйте for если надо менять что-то внутри коллекции
0
07.07.2018, 12:32
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.07.2018, 12:32
Помогаю со студенческими работами здесь

При распараллеливании foreach ошибка System.InvalidOperationException
Здраствуйте. Провожу сейчас распараллеливание алоритма поиска ассоциативных правил Есть код. ...

Организация собственного исключения и передача в него исходного исключения
Для обработки исключений при работе с БД я создал собственное исключение: public class...

Рекурсивный обход. Не могу сделать табуляцию. Обход с выводом имен файлов
Задание простое, ну по крайней мере на первый взгляд. Написать скрипт обхода вложенных директорий с...

InvalidOperationException
Здравствуйте. Пишу программу, демонстрирующую решение проблемы обедающих философов. С алгоритмом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Откуда у float лишние цифры в конце дробной части. Представление чисел с плавающей точкой
bytestream 25.01.2025
При разработке программного обеспечения часто возникает необходимость работать с вещественными числами, которые содержат дробную часть. В современных компьютерных системах такие числа представляются. . .
Как использовать глобальную переменную в функции в Python
bytestream 25.01.2025
В программировании на Python глобальные переменные представляют собой особый тип переменных, которые доступны для использования во всех частях программы, включая различные функции, классы и модули. . . .
Как в цикле обойти все элементы map в Java
bytestream 25.01.2025
В разработке на Java одной из наиболее востребованных структур данных является интерфейс Map, который предоставляет эффективный способ хранения и управления парами "ключ-значение". Разработчики. . .
Для чего нужен UserManager.isU­serAGoat(­) в Android и как это использовать
bytestream 25.01.2025
В мире Android-разработки существует множество интересных и порой загадочных функций, о которых знают далеко не все разработчики. Одной из таких функций является метод UserManager. isUserAGoat(),. . .
Как обойти масси в JavaScript. Всё о циклах
bytestream 25.01.2025
JavaScript представляет собой мощный язык программирования, широко используемый в веб-разработке, где массивы и циклы являются фундаментальными концепциями для эффективной работы с данными. Массив в. . .
Как сделать, чтобы существующая ветка отслеживала удалённую в Git. Связывание локальных и удалённых веток
bytestream 25.01.2025
В разработке программного обеспечения системы контроля версий стали неотъемлемой частью процесса создания качественного программного продукта. Эти инструменты позволяют разработчикам эффективно. . .
Как проверить, что файл НЕ существует с помощью Bash
bytestream 25.01.2025
В системном администрировании проверка существования файлов является фундаментальной операцией, особенно при написании скриптов на Bash. Правильная обработка ситуаций, когда файл отсутствует,. . .
Как проверить, что строка пустая, неопределена или null в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript разработчики регулярно сталкиваются с необходимостью проверки строковых значений на различные состояния. Валидация данных является критически важным. . .
Как проверить существование ключа в объекте или массиве в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript программисты постоянно сталкиваются с необходимостью работать с объектами и массивами. Эти структуры данных являются фундаментальными элементами языка и. . .
Как создать ArrayList из массива (array) в Java
bytestream 25.01.2025
При разработке программного обеспечения на языке Java программисты часто сталкиваются с необходимостью эффективного управления наборами данных. Массивы и ArrayList являются двумя фундаментальными. . .
Как сгенерировать случайные целые числа (int) в указанном диапазоне в Java
bytestream 25.01.2025
В программировании генерация случайных чисел является важнейшим инструментом для решения множества практических задач. От создания игровых механик до реализации алгоритмов машинного обучения, от. . .
Как сделать, чтобы grep выводил строки до и после найденной
hw_wired 25.01.2025
Утилита grep стала незаменимым инструментом для поиска и фильтрации информации в Unix-подобных операционных системах. Эта командная утилита позволяет осуществлять поиск строк, соответствующих. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru