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,我刚刚意识到了这一点。自从我尝试快速删除后,你居然能看到那篇帖子,真奇怪当我意识到我的错误时,这篇文章给出了一个更好的答案。无论如何,乔恩完全值得这个答案。沟通技巧有时能起到作用真是太神奇了。事实上,我更喜欢你的答案,而不是我自己的答案。