【发布时间】:2012-07-05 17:26:50
【问题描述】:
考虑以下 C#:
// C# .net
switch(x)
{
case 1:
for(int i = 0; i < 10; i++)
{
int val = getValue(i);
if (val == 0)
goto endswitch;
}
doMoreStuff();
break;
case 2:
doSomeThingElse();
break;
default: throw new ArgumentOutOfRangeException();
}
endswitch: ;
我已经编写了类似于上述代码示例的代码。问题是我需要从内部 for 循环内部中断 switch 语句。如果我在那里放一个break 语句,它只会打破内部for 循环,然后继续doMoreStuff(),这不是我需要的。
这里似乎效果最好的替代方法是goto 声明,但我知道这不受欢迎。
另一种选择是在 for 循环中跟踪一个单独的变量,但这会增加代码行并且不太优雅。
最好的方法是什么?
更新: 我读到有一种方法可以在 JavaScript 中执行此操作。它的工作原理是这样的:(http://www.devguru.com/technologies/ecmascript/quickref/break.html)
// JavaScript
outer_loop:
for(i=0; i<3; i++)
{
document.write("<BR>" + "outer " + i + ": ");
for(j=0; j<5; j++)
{
document.write("inner " + j + " ");
if(j==x)
break outer_loop;
}
}
这样的事情在 C# 中可能吗?
【问题讨论】:
-
val是bool还是int?您的代码不会按原样编译。 -
由于缺少括号“{”,代码无法编译。一定是用户打错了。
-
从代码中也可以看出 val x 是一个整数。
-
如果合适,考虑用多态性替换
switch语句。请参阅“[告诉,不要问]”原则 (pragprog.com/articles/tell-dont-ask)。
标签: c# .net controls structure goto