c# - 无效操作异常 : Collection Was Modified

标签 c# exception collections dictionary

我知道在迭代集合时无法修改集合。

通常我会复制想要迭代的集合,然后迭代该副本以避免错误。

我的程序;但是,对我试图复制的集合进行了大量快速修改。

该错误是否是因为我在修改父集合时进行复制而发生的?

我知道 ConcurrentDictionary 为跨线程提供了某种锁定机制。我可以使用类似的方法来防止此错误吗?

    // Original collection:
    Dictionary<string, Enemy> Dict_Enemies = new Dictionary<string, Enemy>();

    // Copy of original collection: (this line throws the exception)
    Dictionary<string, Enemy> Dict_Enemies_Copy = new Dictionary<string, Enemy>(Dict_Enemies);

最佳答案

尝试使用 ConcurrentDictionary Dict_Enemies 允许从多个线程修改它。然后使用 ToArray()线程安全操作中创建它的副本方法:

// Original collection:
var Dict_Enemies = new ConcurrentDictionary<string, Enemy>();

// Thread-safe copy:
ICollection<KeyValuePair<string, Enemy>> Dict_Enemies_Copy = Dict_Enemies.ToArray();

关于c# - 无效操作异常 : Collection Was Modified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9662521/

相关文章:

python - 发生未处理的异常时如何跳过 sys.exitfunc

java - 我应该放弃 java.util.HashSet 以支持 CompactHashSet 吗?

java - 双向链表实现中的 NullPointerException

c# - LDAP 过滤器编码器更换

swift - 错误 : EXC_BAD_ACCESS (code=1, 地址 = 0x6f697483)。进程已经返回到表达式求值前的状态

java - 进程死后如何使用异常堆栈跟踪

c# - Dictionary.Keys 返回的 KeyCollection 的操作速度有多快? (。网)

c# - Visual Studio 2013 快速观看(和静态属性)

c# - "A call to a PInvoke function has unbalanced the stack"

c# - 无法通过 IP 地址连接到 SQL Server Express - c#