c# - 枚举时修改了集合

标签 c# list thread-safety action

<分区>

Possible Duplicate:
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 很着迷:/

最佳答案

很可能其中一个操作修改了 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);
}

关于c# - 枚举时修改了集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227037/

相关文章:

c# - 将 'LoadfromCollection' 与包含另一个列表的列表一起使用

c++ - STL vector 并发读取线程安全吗?

c++ - std::list 中的迭代器感知对象

c# - 如何创建一个动态List<List<string>>?

Java 静态变量 - Foo.var = value 和 var = value 之间的区别?

sql - 这个存储过程是线程安全的吗? (或者 SQL Server 上的任何等效项)

c# - 当发送者在队列中发送消息时,RabbitMQ Consumer.Received 事件不会在 asp.net Web 应用程序(作为监听器)中触发

c# - Entity Framework - 使用默认参数调用存储过程

c# - Xamarin 安卓后台服务

c# - Protobuf-net 在与泛型一起用于反序列化时要求 TypeModel.CS