我被要求对一些C#代码进行维护工作,我告诉他们,这些代码最初是从Visual Basic 6转换而来的。(我之所以提到这一点,只是因为我不知道VB6所以我不知道&#39 ;知道这种语言是否更有意义......。)
它有一个 for 循环,它通过在 for 循环中使用开关解析一些专有脚本语言的文本。 。 。
for ( t = 0; t < upperBound(tokens); t++)
{
String mystring = tokens[t];
switch (mystring)
{
case "GOTO":
if (firstGoto == -1)
{
firstGoto = t;
}
else
{
// compute number of tokens in GOTO
pointLength = t - firstGoto - 1;
break; // exit for
}
break;
case "ACTUATE"
. . .
注意评论
// exit for
程序员希望 break 将退出 for 循环,但我认为它只会退出 switch 语句,因为的文档>休息说
break语句终止它出现的最近的封闭循环或switch语句。控制权将传递给终止语句后面的语句(如果有)。
所以我更正确,这只会退出开关,但仍然在中,如果是,那么正确的做法是什么程序员打算?
答案 0 :(得分:7)
是的,break会突破最近的循环或开关。最简单的方法是使用goto。 (不,goto不是邪恶的)
for {
switch(...) {
....
goto MyLabel;
}
}
MyLabel:
答案 1 :(得分:1)
是中断只会在此方案中终止交换机。如何使用布尔值退出for?..
for ( t = 0; t < upperBound(tokens); t++)
{
String mystring = tokens[t];
bool exitFor = false;
switch (mystring)
{
case "GOTO":
if (firstGoto == -1)
{
firstGoto = t;
}
else
{
// compute number of tokens in GOTO
pointLength = t - firstGoto - 1;
exitFor = true;
break; // exit for
}
break;
case "ACTUATE"
. . .
if(exitFor)
break;
答案 2 :(得分:1)
是的,你是对的...... break只会退出最里面的代码块。
这样做的一个简单方法是在switch语句中设置一个布尔标志,并在循环结束时执行此操作:
var flag = false;
for (...) {
switch (...) {
case "x":
flag = true;
}
if (flag) break;
}