Наткнулся вопрос при написании какой-то код для загрузки settings-- следующий код моего приложения производит ошибку в InvalidOperationException:VB.NET For-Каждая ошибка Loop
For Each c As MapInfo In CurrentMaps
AddMap(c, False)
Next
Отладчик выдвигает на первый план Следующая и от MSDN page на ошибке, похоже, что это связано с тем, что коллекция (CurrentMaps) каким-то образом изменилась с того момента, когда она последний раз натолкнулась на перечислитель (для обработки для каждого).
Не уверен, почему это произошло, хотя, как AddMap принимает MapInfo ByVal и не касается входа (так коллекция не изменяется).
я изменил его к этому, который отлично работает:
For i As Integer = 0 To CurrentMaps.Count - 1
AddMap(CurrentMaps(i), False)
Next
Те должны функционально работать так же, верно? Любая идея, почему Для каждого не работает?
Edit:
Ах понял это out-- проблема в том, что я использую CurrentMaps в качестве временной переменной (сбор отслеживание текущих карт), и AddMap обычно используется в приложение, чтобы добавить новый map (что означает как обновление пользовательского интерфейса, так и добавление его в CurrentMaps).
Здесь (при загрузке приложения) я просто использую AddMap для обновления пользовательского интерфейса, но дополнительный вызов для добавления элемента в CurrentMaps все еще существует, поэтому он действительно модифицировал CurrentMaps.
Спасибо за ввод, все!
Что делает 'AddMap'? * * * * Когда-либо касаются 'CurrentMaps'? – cHao
2-й сниппет также не работает, если CurrentMaps - это словарь или отсортированный список. Отвратительный вид необнаруживаемого отказа. –