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

Ger*_*ald 22 c# foreach loops if-statement while-loop

我有以下代码:

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
             }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是当我if在最后一个foreach循环中点击第二个语句时返回第一个foreach循环.

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

提前致谢!

Hen*_*man 32

直接的唯一方法是使用a goto.

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

  • 就像一张纸条,我的老大学讲师明确表示,如果使用`goto` :),任何人都会失败. (4认同)
  • 我想我应该做第二个选择,我应该把while和foreach放在一个新方法上.谢谢你的建议! (2认同)
  • @Sayse然后那个讲师是个白痴.举个简单的例子,用C语言进行清理的惯用方法[使用gotos](http://stackoverflow.com/a/15243109/459975).毫无疑问,各种C邮件列表上的新程序员试图反对它,因为对goto的偏见,然后有人必须解释成语存在的原因. (2认同)
  • 我不喜欢 goto。在教学生时,避免使用它们是一个很好的方法。关键是让他们学会使用正确的循环结构并思考程序流程。经过几年的实践,开发人员学会了一种风格,并知道什么时候使用 goto 是合适的。称呼老师的名字也无济于事。 (2认同)
  • 考虑到这一点,我们在早期就有一位C语言教师,使得使用return语句中功能的人失败了,这使得代码变得更加丑陋,但绝对教会了我们逻辑.我想可以肯定地说,当C#带有"yield"声明时,他死于心脏病发作. (2认同)

Dus*_*san 15

像这样的东西:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我发布了相同的代码,首先是最好的服务,给你信任.但是为了所有神圣的爱,用"//这里是龙"来代码你的代码,以便新手编码器不认为这是正确的编码方式 (3认同)

Say*_*yse 7

没有人提到它(Henk简要提到),但最好的方法是将你的循环移动到自己的方法和使用 return

public ReturnType Loop(args)
{
foreach outerloop
    foreach innerLoop
       if(Condition)
          return;
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 5

正如我所见,您接受了一个人引用您的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

简单明了。:)