c# - Foreach 同时将项目添加到循环集合

标签 c# .net

情况是这样的:

我正在浏览一些代码,我想知道以下语句是否引用了所选集合或一个副本,当 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/

相关文章:

c# - 具有透明背景的 Windows 窗体,可以通过单击

python - Numpy-recarray,C#结构化数据

c# - SeDebugPrivilege() api 函数是否与 System.Diagnostics.Process.EnterDebugMode 相同?

c# - 寻找一种优雅的方式来比较两个列表并显示双方的差异

c# .net 读取 .mdb 文件

c# - Winforms WPF Interop - WPF 内容无法绘制

c# - 检查 Key 是否存在于 NameValueCollection 中

c# - 在 IoC 模式中将连接字符串之类的东西保存在哪里?

c# - Request.Url.Host 与 Request.Url.Authority

c# - 如何在 Azure Functions 中处理来自多个服务总线队列消息触发器的数据库连接?