可能重复:
Collection was modified; enumeration operation may not execute
我有一个通用列表,我在枚举时执行一些操作。
foreach(Action<string> action in actionList)
{
if(action != null) {
action(mystring);
}
}
现在我得到了这个例外:
InvalidOperationException:
Collection was modified; enumeration operation may not execute
如何解决这个问题,我紧紧抓住.NET 3.5:/
答案 0 :(得分:6)
很可能其中一个操作会修改actionList
,使迭代器无效。避免错误的最简单方法是首先获取列表的副本,例如
foreach(Action<string> action in actionList.ToList())
{
if(action != null) {
action(mystring);
}
}
甚至:
foreach (var action in actionList.Where(action => action != null).ToList())
{
action(mystring);
}
答案 1 :(得分:0)
您在迭代期间修改了actionList。它可以是第二个线程,它与当前循环或进行修改或另一次迭代的动作方法不同步。所以解决方案可能是:
var tmp = new List<Action<string> >(actionList);
foreach(Action<string> action in tmp)
{
if(action != null) {
action(mystring);
}
}
但是只有在并行线程的情况下修改动作的情况下才会有效,你应该同步列表。