枚举时修改了集合

Pas*_*cal 1 c# action list thread-safety

可能重复:
收集已修改; 枚举操作可能无法执行

我有一个通用列表,我在枚举时执行一些操作.

foreach(Action<string> action in actionList) 
{
    if(action != null) {
        action(mystring);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我得到这个例外:

InvalidOperationException:
Collection was modified; enumeration operation may not execute
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题,我紧紧抓住.NET 3.5:/

Jon*_*eet 6

好吧,其中一个动作会修改actionList,使迭代器无效.避免错误的最简单方法是首先获取列表的副本,例如

foreach(Action<string> action in actionList.ToList()) 
{
    if(action != null) {
        action(mystring);                               
    }
}
Run Code Online (Sandbox Code Playgroud)

甚至:

foreach (var action in actionList.Where(action => action != null).ToList())
{
    action(mystring);
}
Run Code Online (Sandbox Code Playgroud)