众所周知,不允许在迭代循环中对集合进行突变。例如,当删除某个项目时,运行时将引发异常。
然而,今天我惊讶地发现,如果变异操作后跟任何退出循环语句,也不例外。即,循环结束。
//this won't throw!
var coll = new List<int>(new[] { 1, 2, 3 });
foreach (var item in coll)
{
coll.RemoveAt(1);
break;
}
我查看了框架代码,很明显只有当迭代器向前移动时才会引发异常。
我的问题是:上面的“模式”可以被认为是一种可接受的做法,或者使用它有什么偷偷摸摸的问题吗?