アプリの設定を読み込むコードを記述しているときに問題が発生しました。次のコードではInvalidOperationExceptionエラーが発生します。
For Each c As MapInfo In CurrentMaps
AddMap(c, False)
Next
デバッガーはNext部分を強調表示します。エラーのMSDN ページから、これはコレクション ( CurrentMaps ) が最後に列挙子をバンプしたとき ( For Eachを処理するため) から何らかの形で変更されたためのようです。
ただし、AddMapはMapInfo ByVal を取得し、入力に触れないため (したがって、コレクションは変更されません)、なぜそれが起こるのかわかりません。
これを次のように変更しました。これは完全に正常に動作します。
For i As Integer = 0 To CurrentMaps.Count - 1
AddMap(CurrentMaps(i), False)
Next
それらは機能的に同じように機能するはずですよね?For Eachが機能しない理由は何ですか?
編集:
ああ、それを理解しました-問題は、CurrentMaps を一時変数 (現在のマップを追跡するコレクション) として使用し、AddMap は通常、アプリ内で新しいマップを追加するために使用されることです (つまり、UI の更新と CurrentMaps への追加の両方を意味します)。 )。
ここでは (アプリをロードするとき)、AddMap を使用して UI を更新しているだけですが、項目を CurrentMaps に追加するためのサブ呼び出しがまだ残っているため、実際には CurrentMaps を変更していました。
ご意見ありがとうございます。