我知道在迭代集合时无法修改集合。
通常我会复制想要迭代的集合,然后迭代该副本以避免错误。
我的程序;但是,对我试图复制的集合进行了大量快速修改。
该错误是否是因为我在修改父集合时进行复制而发生的?
我知道 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/