如何从特定级别的嵌套循环中退出。例如:
foreach (item in Items)
{
foreach (item2 in Items2)
{
// Break; => we just exit the inner loop
// while we need to break both loops.
}
}
如果有更多嵌套循环,我们想从内部退出第N个循环。像上面例子中的break(2)
那样会打破两个循环。
答案 0 :(得分:21)
我能想到的两个选择:
(1)在中断之前在第二个循环内设置一个标志。如果设置了标志,则在内部迭代中使用一个突破第一次迭代的条件。
bool flag = false;
foreach (item in Items)
{
foreach (item2 in Items2)
{
flag = true; // whenever you want to break
break;
}
if (flag) break;
}
(2)使用goto语句。
foreach (item in Items)
{
foreach (item2 in Items2)
{
goto GetMeOutOfHere: // when you want to break out of both
}
}
GetMeOutOfHere:
// do whatever.
答案 1 :(得分:8)
总是有可怕的(并且受到很多诽谤?)goto ......
编辑:经过一段时间的思考后,我发现你可以使用Linq来做这件事,假设有一些条件得到满足。
var query = from item in items
from item2 in items2
select new { item, item2 };
foreach (var tuple in query)
{
//...
break;
}
但是,你可以在F#中更优雅地做到这一点。
答案 2 :(得分:2)
此帖已在此前文中讨论过:
简短回答:单个关键字真的不可能。你必须在一些标志逻辑中编码(如另一个问题的答案中所建议的那样。)
我个人将它拆分成单独的方法,将循环“块”放在一个函数中,然后返回(从而打破两个循环)对你有用吗?