C#/ .NET 4.0中的一个新功能是,您可以在foreach不获取异常的情况下更改您的枚举.请参阅Paul Jackson的博客文章"并发的有趣副作用:在枚举时从集合中删除项目"以获取有关此更改的信息.
执行以下操作的最佳方法是什么?
foreach(var item in Enumerable)
{
foreach(var item2 in item.Enumerable)
{
item.Add(new item2)
}
}
Run Code Online (Sandbox Code Playgroud)
通常我使用IList一个缓存/缓冲区直到结束foreach,但是有更好的方法吗?
我有我希望看起来像这样的代码:
List<Type> Os;
...
foreach (Type o in Os)
if (o.cond)
return; // Quitting early is important for my case!
else
Os.Remove(o);
... // Other code
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为当您foreach在该列表上的循环内时,无法从列表中删除:
有没有一种解决问题的常用方法?
如果需要,我可以切换到不同的类型.
选项2:
List<Type> Os;
...
while (Os.Count != 0)
if (Os[0].cond)
return;
else
Os.RemoveAt(0);
... // Other code
Run Code Online (Sandbox Code Playgroud)
丑陋,但它应该工作.