C#/中的一个新功能.NET4.0是指,您可以在foreach中更改您的枚举,而不会出现异常.有关这一变化的信息,请参见Paul Jackson的博客条目100.

执行以下操作的最佳方式是什么?

foreach(var item in Enumerable)
{
    foreach(var item2 in item.Enumerable)
    {
        item.Add(new item2)
    }
}

通常我使用IList作为缓存/缓冲区,直到foreach结束,但是有更好的方法吗?

推荐答案

foreach中使用的集合是不可变的.这是精心设计的.

正如MSDN上所说:

foreach语句用于 循环访问集合以获取 您想要的信息,但可以 不能用于添加或删除项目 从源集合中避免 不可预测的副作用.If you need to add or remove items from the source collection, use a for loop.

Poko提供的link中的帖子表明这在新的并发集合中是允许的.

.net相关问答推荐

安装特定主要版本的DotNet SDK最新版本

为什么DotNet新的webapi;命令会为我生成不同的文件夹

在PowerShell中,XML子对象和属性是对象属性.它怎麽工作?

获取Ef-Core集合的DeleteBehavior

xunit Assert.ThrowsAsync() 不能正常工作?

使用 Windows 服务和 C# 检测 USB 驱动器插入和移除

添加新实体标量时实体框架 4 映射片段错误

从 Web.Config 中的邮箱友好显示名称存储 Smtp

如何将自定义 UserControl 显示为对话框?

C# 相当于 Java 的 <?在泛型中扩展 Base>

从 C# 中的接口继承 XML 注释

迭代器和枚举器的区别

是否有可用的 WPF 备忘单?

如何在 Action 中传递参数?

Find() 和 First() 抛出异常,如何改为返回 null?

强制 XmlSerializer 将 DateTime 序列化为 'YYYY-MM-DD hh:mm:ss'

让 String.Replace 只打整个单词的方法

无法加载文件或程序集Antlr3.Runtime (1)或其依赖项之一

在 C#/.NET 中合并两个图像

.NET Remoting 真的被弃用了吗?