【发布时间】:2011-01-20 18:26:47
【问题描述】:
在编写一些代码来加载我的应用程序设置时遇到一个问题——以下代码会产生 InvalidOperationException 错误:
For Each c As MapInfo In CurrentMaps
AddMap(c, False)
Next
调试器突出显示 Next 部分,从错误上的MSDN page 来看,这似乎是因为集合 (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。
谢谢大家的意见!
【问题讨论】:
-
AddMap是做什么的? 它有没有碰过CurrentMaps? -
如果 CurrentMaps 是字典或排序列表,第二个 sn-p 也会失败。一种令人讨厌的无法检测到的故障。
标签: vb.net for-loop each invalidoperationexception