从嵌套循环退出所需级别

Xaq*_*ron 9 c# break nested-loops

可能重复:
突破嵌套循环

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

foreach (item in Items)
{
    foreach (item2 in Items2)
    {
        // Break; => we just exit the inner loop
        //           while we need to break both loops.
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有更多的嵌套循环,我们想从内部退出第N个循环.像break(2)上面的例子那样打破了两个循环.

csa*_*ano 21

我能想到的两个选择:

(1)在分解之前在第二个循环内设置一个标志.如果设置了标志,则遵循内部迭代,使条件突破第一次迭代.

bool flag = false;
foreach (item in Items)
{
    foreach (item2 in Items2)
    {
        flag = true; // whenever you want to break
        break;
    }

    if (flag) break;
}
Run Code Online (Sandbox Code Playgroud)

(2)使用goto语句.

foreach (item in Items)
{
    foreach (item2 in Items2)
    {
        goto GetMeOutOfHere: // when you want to break out of both
    }

}

GetMeOutOfHere:
// do whatever.
Run Code Online (Sandbox Code Playgroud)


pho*_*oog 8

总是有可怕的(并且受到很多诽谤?)转到......

编辑:经过一段时间的思考,我发现你可以使用Linq来做到这一点,假设有一些条件得到满足.

var query = from item in items
                    from item2 in items2
                     select new { item, item2 };

foreach (var tuple in query)
{
    //...
    break;
}
Run Code Online (Sandbox Code Playgroud)

不过,你可以在F#中更优雅地完成这项工作.