从嵌套循环退出所需级别

时间:2011-05-21 01:20:07

标签: c# break nested-loops

  

可能重复:
  Breaking out of a nested loop

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

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)那样会打破两个循环。

3 个答案:

答案 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)

此帖已在此前文中讨论过:

Breaking out of a nested loop

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

我个人将它拆分成单独的方法,将循环“块”放在一个函数中,然后返回(从而打破两个循环)对你有用吗?