我有收藏:
public class myList : List<myClass> { }
Run Code Online (Sandbox Code Playgroud)
并做:
foreach (myClass obj in myList) {
//...
if (some_condition) {
myList.Add(newObj); }
//...
}
Run Code Online (Sandbox Code Playgroud)
所以在2次迭代之前,我得到的错误如下:collection was changed.显然问题在于myList.Add(newObj);.
我如何组织这个循环以避免错误?请记住:我可以添加一些元素列表但永远不会删除.
我可以使用for循环与迭代器.但在这种情况下,我的代码看起来会更糟糕.也许这是一个更好的解决方案?
你可以强制复制集合 - >将在复制的集合上创建一个新的迭代器.复制集合的最简单方法是扩展方法ToArray(),它从列表中创建一个通用数组.这不会复制对象,只会复制对它们的引用.
foreach(myClass obj in myList.ToArray())
{
...
}
Run Code Online (Sandbox Code Playgroud)
这意味着在发生任何更改之前,您将始终循环遍历集合中的所有项目!没有添加,没有删除.
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |