一尘不染

在“ foreach”循环中修改列表的最佳方法是什么?

c#

C#/ .NET 4.0中的一项新功能是您可以在foreach不更改异常的情况下在中更改可枚举。有关此更改的信息,请参见Paul
Jackson的博客文章
“有趣的并发副作用:枚举时从集合中删除项目”

进行以下操作的最佳方法是什么?

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

通常,我会IList在末尾使用用作缓存/缓冲区foreach,但是还有更好的方法吗?


阅读 240

收藏
2020-05-19

共1个答案

一尘不染

foreach中使用的集合是不可变的。这很大程度上是设计使然。

就像在MSDN上所说的:

foreach语句用于遍历集合以获取所需的信息,但不能用于在源集合中添加或删除项目,以避免不可预期的副作用。
如果需要在源集合中添加或删除项目,请使用for循环。

Poko提供的链接中的帖子表明新的并发集合中允许这样做。

2020-05-19