从''case'语句中打破'for'循环

use*_*117 0 c#

我被要求对一些C#代码进行维护工作,据我所知,这些代码最初是从Visual Basic 6转换而来的.(我之所以提到这只是因为我不知道VB6,所以我不知道它是否会更多用这种语言感觉......

它有一个用于循环,其利用用于解析专有的脚本语言,一些文本开关内部循环...

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"
 . . . 
Run Code Online (Sandbox Code Playgroud)

注意评论

   // exit for
Run Code Online (Sandbox Code Playgroud)

程序员预计突破将退出循环,但我觉得它只会退出开关,因为文档声明决裂

break语句终止它出现的最近的封闭循环或switch语句.控制权将传递给终止语句后面的语句(如果有).

所以我是正确的,这只会退出交换机,但仍然在for,如果是这样,那么正确的方法是什么原始程序员的意图呢?

Den*_*s_E 7

是的,break会突破最近的循环或切换.最简单的方法是使用goto.(不,转到不邪恶)

for {
switch(...) {
        ....
        goto MyLabel;
    }
}
MyLabel: 
Run Code Online (Sandbox Code Playgroud)

  • +1勇敢.更不用说开关实际上只是一组结构化的goto. (4认同)
  • @Smeegs 许多语句都是伪装的 goto(返回、中断、继续、if-else)我不理解反 goto 运动。这就像种族主义:每个人都可以跳,除非你的名字被转到。:) (2认同)