Столкнулся с проблемой при написании кода для загрузки настроек моего приложения: следующий код выдает ошибку InvalidOperationException:
For Each c As MapInfo In CurrentMaps
AddMap(c, False)
Next
Отладчик выделяет часть Далее и из страница MSDN об ошибке, похоже, это связано с тем, что коллекция (CurrentMaps) каким-то образом изменилась по сравнению с тем моментом, когда она в последний раз использовала перечислитель (для обработки For Каждый).
Однако не уверен, почему это произошло, поскольку AddMap берет MapInfo ByVal и не касается ввода (поэтому коллекция не изменяется).
Я изменил это на это, которое отлично работает:
For i As Integer = 0 To CurrentMaps.Count - 1
AddMap(CurrentMaps(i), False)
Next
Они должны функционально работать одинаково, верно? Есть идеи, почему функция Для каждого не работает?
Изменить:
Ах, понял - проблема в том, что я использую CurrentMaps как временную переменную (коллекция, отслеживающая текущие карты), а AddMap обычно используется в приложении для добавления новой карты (что означает как обновление пользовательского интерфейса, так и добавление его в CurrentMaps). ).
Здесь (при загрузке приложения) я просто использую AddMap для обновления пользовательского интерфейса, но подвызов для добавления элемента в CurrentMaps все еще был там, поэтому он действительно модифицировал CurrentMaps.
Всем спасибо за участие!
AddMap
? это когда-либо касалосьCurrentMaps
? - person cHao   schedule 20.01.2011