我知道有很多方法可以做得更好,但我已经在现有代码中看到它,现在我想知道这是否会产生任何负面影响.请注意删除后的休息时间.因此,我一般不关心迭代器,但是,我确实关心意外行为( - >潜在的异常).
foreach (var item in items)
{
//do stuff
if (item.IsSomething)
{
items.Remove(item); //is this safe???
break;
}
}
Run Code Online (Sandbox Code Playgroud)
也有可能编译器以我不期望的方式优化某些东西吗?
编译器生成Dispose()对finally块中执行的枚举器的调用,但这应该不是问题.如果您break在删除项目后立即执行此操作,则不会发生任何错误,因为您不再使用枚举器.
如果你想以不同的方式(出于样式或其他原因),你可以这样做:
var item = items.FirstOrDefault(i => i.IsSomething);
if (item != null) {
items.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
它也有点短:)(我假设你在这里使用你的集合中的引用或可空类型).