C#/ .NET 4.0中的一项新功能是您可以在foreach不更改异常的情况下在中更改可枚举。有关此更改的信息,请参见Paul Jackson的博客文章 “有趣的并发副作用:枚举时从集合中删除项目” 。
foreach
进行以下操作的最佳方法是什么?
foreach(var item in Enumerable) { foreach(var item2 in item.Enumerable) { item.Add(new item2) } }
通常,我会IList在末尾使用用作缓存/缓冲区foreach,但是还有更好的方法吗?
IList
foreach中使用的集合是不可变的。这很大程度上是设计使然。
就像在MSDN上所说的:
foreach语句用于遍历集合以获取所需的信息,但不能用于在源集合中添加或删除项目,以避免不可预期的副作用。 如果需要在源集合中添加或删除项目,请使用for循环。
Poko提供的链接中的帖子表明新的并发集合中允许这样做。