如果在此循环中更改迭代集合,如何使用foreach?

D4C*_*D4C -2 c# foreach

我有收藏:

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循环与迭代器.但在这种情况下,我的代码看起来会更糟糕.也许这是一个更好的解决方案?

fix*_*gon 6

你可以强制复制集合 - >将在复制的集合上创建一个新的迭代器.复制集合的最简单方法是扩展方法ToArray(),它从列表中创建一个通用数组.这不会复制对象,只会复制对它们的引用.

foreach(myClass obj in myList.ToArray())
{
      ...
}
Run Code Online (Sandbox Code Playgroud)

这意味着在发生任何更改之前,您将始终循环遍历集合中的所有项目!没有添加,没有删除.