情况是这样的:
我正在浏览一些代码,我想知道以下语句是否引用了所选集合或一个副本,当 foreach 循环完成时,它用它来替换原始对象。如果是第一个,它会获取新找到的页面并将它们加入循环吗?
foreach(Page page in Pages)
{
page.AddRange(RetrieveSubPages(page.Id));
}
编辑:对不起,我打错了。
应该是这样的:
foreach(Page page in pages)
{
pages.AddRange(RetrieveSubPages(page.Id));
}
我想说的是,如果我将一些对象添加到枚举集合中,它会在 foreach 中加入这些对象吗?
最佳答案
看起来代码并没有修改Pages
集合,而是修改了Pages
中的Page
对象的内容收藏。 Page
类型至少具有类似集合的方法。
一般来说,每个集合都以适合自己的方式实现迭代,并且通常在迭代时变得不可修改,但是可以通过拍摄自身的快照来实现迭代的集合。
没有检测循环退出的机制,允许在该点采取行动(考虑这将如何与异常交互,在循环体中中断和返回)。
关于c# - Foreach 同时将项目添加到循环集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1425932/