【发布时间】:2011-09-11 19:20:21
【问题描述】:
我有一个类似的结构(但很多更复杂):
var list = new List<string>();
// .. populate list ..
foreach(var item in list)
{
DoFunction(list);
}
public void DoFunction(List<string> list)
{
if(someCondition == true)
{
// .. modify list in here ..
}
}
现在,我知道无法编辑您正在遍历的集合,但是如果您必须编辑列表(没有try catch 语句),如何优雅地跳出循环?有什么方法可以判断列表是否已被编辑?你能在它注意到之前编辑列表并快速break;吗?
【问题讨论】:
-
IIRC 会抛出并发修改异常。
-
如果出现某些情况,退出循环并在此之后编辑列表有什么问题?
-
我不会尝试修改然后破坏。它可能适用于某些枚举器,但会中断其他枚举器(例如,那些底层处理是异步的)。
-
您必须在更改列表后中断循环,以便不调用 IEnumerator 接口的 MoveNext 方法将迭代器定位到下一个元素