Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 继续并中断扩展范围_C#_.net - Fatal编程技术网

C# 继续并中断扩展范围

C# 继续并中断扩展范围,c#,.net,C#,.net,continue或break是否有可能比当前运行的循环具有更大的作用域? 在下面的示例中,我希望在expr为true时继续执行外部for循环,尽管它是在内部for循环中调用的,因此既不执行[某些内部代码]也不执行[某些外部代码] for(int outerCounter=0;outerCounter<20;outerCounter++){ for(int innerCounter=0;innerCounter<20;innerCounter++){ if(expr)

continue
break
是否有可能比当前运行的循环具有更大的作用域?
在下面的示例中,我希望在
expr
为true时继续执行外部for循环,尽管它是在内部for循环中调用的,因此既不执行
[某些内部代码]
也不执行
[某些外部代码]

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

for(int-outerCounter=0;outerCounter您可以使用goto语句,否则-no、break和continue语句不支持此操作


虽然goto语句被认为是一种不好的做法,但这是退出多个for循环的唯一原因……而且看起来这也是仍然是.NET的一部分的原因。您的意思是这样的吗

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

for(int-outerCounter=0;outerCounter如果必须,您可以使用
goto
。但是,我通常采用以下两种方法之一:

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

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

您可以使用带有标签的
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]
   }

for(int-outerCounter=0;outerCounter不会,因为runOuter将为true,[某些外部代码]只有当Runout为false时才运行。这不是你想要的逻辑吗?+1是的,谢谢,这是Jon Skeets帖子的第二版。但是我之前的评论与你的第一个答案有关,没有解决问题。我已经删除了我的评论。@HCL,我刚刚意识到了这一点。自从我尝试快速删除后,你居然能看到那篇帖子,真奇怪当我意识到我的错误时,这篇文章给出了一个更好的答案。无论如何,乔恩完全值得这个答案。沟通技巧有时能起到作用真是太神奇了。事实上,我更喜欢你的答案,而不是我自己的答案。