跳出'for'从''case"声明
本文关键字:quot 声明 case for 跳出 | 更新日期: 2023-09-27 18:09:16
我被要求做一些c#代码的维护工作,我被告知,这些代码最初是从Visual Basic 6转换过来的。(我提到这个只是因为我不懂VB6,所以我不知道它在那种语言中是否会更有意义…)
它有一个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"
. . .
注意注释
程序员期望break将退出for循环,但我认为它只会退出switch语句,因为break的文档说// exit for
break语句终止其出现的最近的封闭循环或switch语句。控制传递给终止语句后面的语句(如果有的话)。
那么我是否正确,这将只退出开关,但仍然在,如果是这样,什么是正确的方法来做原来的程序员想要的?
是,break将跳出最近的循环或开关。最简单的方法是使用goto。(不,goto并不邪恶)
for {
switch(...) {
....
goto MyLabel;
}
}
MyLabel:
是的,你是正确的…Break只会退出最里面的代码块。
一个简单的方法是在switch语句中设置一个布尔标志,在循环结束时这样做:
var flag = false;
for (...) {
switch (...) {
case "x":
flag = true;
}
if (flag) break;
}
是break将仅在此场景中终止交换机。如何使用布尔值退出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;