从所需级别的嵌套循环退出

本文关键字:嵌套循环 退出 | 更新日期: 2023-09-27 17:57:02

可能的重复项:
打破嵌套循环

如何从特定级别的嵌套循环退出。例如:

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),它打破了两个循环。

从所需级别的嵌套循环退出

我能想到的两个选项:

(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.

总是有可怕的(而且很诋毁?

编辑:在考虑了一段时间之后,我想到你可以使用 Linq 来做到这一点,假设满足一些条件。

var query = from item in items
                    from item2 in items2
                     select new { item, item2 };
foreach (var tuple in query)
{
    //...
    break;
}

不过,您可以在 F# 中更优雅地执行此操作。

这在

这篇文章之前已经讨论过:

打破嵌套循环

简短回答:使用单个关键字真的是不可能的。您必须使用一些标志逻辑进行编码(如另一个问题的答案中所建议的那样)。

我个人会将其拆分为单独的方法,将循环"块"放在函数中并返回(从而破坏两个循环)对您有用吗?