我有一个类似的结构(但很多更复杂的):
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 ..
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我明白它不可能编辑你正在进行的集合,但如果你必须编辑列表(没有try catch声明),你如何优雅地跳出循环?有没有办法判断列表是否已被编辑?您可以在break;注意到之前快速编辑列表吗?
Str*_*ior 34
是的,你可以打破,如果这是你真正想要的.在for循环尝试从列表中获取下一个项目之前,不会抛出异常.
但我发现最简单的方法是创建并遍历列表副本,这样您就不用担心了.
foreach(var item in list.ToList())
Run Code Online (Sandbox Code Playgroud)
与更复杂代码的可维护性成本相比,额外的未触及列表的额外性能开销通常可以忽略不计.
Fos*_*sco 27
循环不允许使用foreach构造,而是for允许您更改列表.
for (var x = 0; x < list.Count; x++) {
}
Run Code Online (Sandbox Code Playgroud)