C# - Collection was modified; enumeration operation may not execute
本问题已经有最佳答案,请猛点这里访问。
在我编写的一个冗长的代码中有一个按钮单击事件。我有一个物品清单。每次单击按钮时,应修改列表(例如,应删除某些项),然后使用for each循环进行迭代。
1 2 3 4 5 6 7 |
当我尝试执行上述代码时,它会导致异常。
InvalidOperationException:集合已修改;枚举操作可能无法执行。
我在网上找到了一些解决方案并尝试了。其中之一是
1 2 3 4 | foreach(Person j in lp.ToList()) { // do something } |
但是没有什么能阻止这个例外。
有人能帮忙吗?
显然,您的
你能做的:
将集合复制到其他集合。
1 | foreach(Person j in lp.ToArray()) |
或
1 |
使用修改项的临时集合。
1 2 3 | List<Person> itemsToDoSomething = new List<Person>(); foreach(Person j in lp) itemsToDoSomething.Add(j); |
然后应用所需的操作。例如,从集合中移除项:
1 | lp.RemoveAll(item => itemsToDoSomething.Contains(item)); |
尝试修改克隆列表并将引用复制回(只是一个想法):
1 |
基本上,在遍历列表时不允许修改它