继续并扩大范围

时间:2011-02-14 13:40:15

标签: c# .net

continuebreak是否有可能比当前正在运行的循环具有更大的范围?
在下面的示例中,我希望在expr为真时继续外部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]
}

在上面

4 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:4)

你的意思是这样吗?

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;
}

答案 2 :(得分:1)

您可以使用goto语句,否则 - no,break和continue语句不支持此功能。

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

答案 3 :(得分:1)

您可以将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]
   }