继续并扩大范围

continuebreak是否有可能比当前运行的循环具有更大的范围?
在下面的例子中,我希望在expr为true时继续外部for循环,尽管它在内部for循环中被调用,因此既不执行[some inner code]也不执行[some outer code]

 for(int outerCounter=0;outerCounter<20;outerCounter++){ for(int innerCounter=0;innerCounter<20;innerCounter++){ if(expr){ [continue outer]; // here I wish to continue on the outer loop } [some inner code] } [some outer code] } 

在上面

如果你绝对必须,你可以使用goto 。 但是,我通常采用以下两种方法之一:

  • 使内部循环成为一个返回bool的单独方法,所以我可以从它返回并指出外部循环应该做什么(中断,继续或执行循环体的其余部分)
  • 保持一个单独的bool标志,它在内循环之前设置,可以在内循环内修改,然后在内循环之后检查

在这些方法中,我通常更喜欢“提取方法”方法。

你的意思是这样的吗?

 for(int outerCounter=0;outerCounter<20;outerCounter++){ for(int innerCounter=0;innerCounter<20;innerCounter++){ if(expr){ runOuter = true; break; } [some inner code] } if (!runOuter) { [some outer code] } runOuter = false; } 

你可以使用goto语句,否则 – no,break和continue语句不支持这个。

虽然goto语句被认为是不好的做法,但这是唯一为什么要退出多个for循环…而且看起来这仍然是.NET的一部分的原因

您可以将goto语句与标签一起使用:

  for(int outerCounter=0;outerCounter<20;outerCounter++){ for(int innerCounter=0;innerCounter<20;innerCounter++){ if(expr){ break; } [some inner code] } // You will come here after break [some outer code] }