如何打破嵌套的foreach循环,然后转到c#上的父foreach循环

本文关键字:循环 foreach 何打破 嵌套 然后 | 更新日期: 2023-09-27 18:22:00

我有以下代码:

foreach(// Some condition here)
{
    while (// Some condition here)
    {
        foreach (// Some condition here)
        {
             if (// Condition again)
             {
                  //Do some code
             }
             if (// Condition again)
             {
                 //Stop the first foreach then go back to first foreach
             }
        }
    }
}

当我在最后一个foreach循环中命中第二个if语句时,我想做的是在第一个foreach循环中返回。

注意:如果第二个if语句不为真,它应该继续最后一个foreach循环,直到条件不为真。

提前感谢!

如何打破嵌套的foreach循环,然后转到c#上的父foreach循环

直接实现这一点的唯一方法是使用goto

另一个(更好的)选择是重组,直到问题消失。例如,将内部代码(while+foreach)放入方法中,然后使用return返回。

类似这样的东西:

resetLoop = false;
for(// Some condition here)
{
    while (// Some condition here)
    {
        foreach (// Some condition here)
        {
             if (// Condition again)
             {
                  //Do some code
             }
             if (// Condition again)
             {
                 //Stop the first foreach then go back to first foreach
                 resetLoop = true;
                 break;
             }
        }
        if (resetLoop) break;
    }
    if (resetLoop) {
        // Reset for loop to beginning
        // For example i = 0;
    }
}

Noone已经提到了它(Henk简要提到过),但最好的方法是将循环移动到自己的方法中,并使用return

public ReturnType Loop(args)
{
foreach outerloop
    foreach innerLoop
       if(Condition)
          return;
}

正如我所看到的,你接受了这个人提到你的goto语句的答案,在现代编程中,在专家看来,goto是一个杀手,我们称之为编程中的杀手,这有一些特定的原因,我现在不在这里讨论,但你的问题的解决方案很简单,你可以在这种场景中使用布尔标志,就像我将在我的例子中演示的那样:

foreach(// Some condition here)
{
    //solution
    bool breakme = false;
    while (// Some condition here)
    {
        foreach (// Some condition here)
        {
            if (// Condition again)
            {
                //Do some code
            }
            if (// Condition again)
            {
                //Stop the first foreach then go back to first foreach
                breakme = true;
                break;
            }
        }
    }
    if(breakme)
    {
        break;
    }
}

简单明了。:)

如前所述,我还建议重新考虑代码,看看是否绝对有必要将3个循环嵌套在另一个循环中。如果是这样,并且我认为其中涉及一些逻辑,您应该考虑拆分为子功能(如建议)

对于一个简单的代码解决方案:

foreach(// Some condition here)
{
    var broke = false;
    while (// Some condition here)
    {
        foreach (// Some condition here)
        {
             if (// Condition again)
             {
                  //Do some code
             }
             if (// Condition again)
             {
                 //Stop the first foreach then go back to first foreach
                 broke = true;
                 break;
             }
        }
        if (broke) break;
        // continue your while loop
    }
}
var broken = false;
foreach(// Some condition here)
{
    broken = false;
    while (!broken && // Some condition here)
    {
        foreach (// Some condition here)
        {
             if (// Condition again)
             {
                 //Do some code
             }
             if (// Condition again)
             {
                 //Stop the first foreach then go back to first foreach
                 broken = true;
                 break;
             }
        }
    }
}