打破' for'来自“'案例"声明

时间:2014-06-19 15:21:44

标签: c#

我被要求对一些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语句。控制权将传递给终止语句后面的语句(如果有)。

所以我更正确,这只会退出开关,但仍然在,如果是,那么正确的做法是什么程序员打算?

3 个答案:

答案 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;
}