0

我有一个像这样的代码:

while(condition)
{
    foreach(string s in list)
    {
        switch(j)
        {
            case 1:
            //do something
            continue;//can I break out of foreach here?
            case 2:
            //do another
            continue;//break 
            ..other cases;
        }
        //do some stuff
    }
    //do some stuff
}

我正在考虑goto,但我听说过很多关于它的坏事。

4

4 回答 4

1

只需使用布尔变量:

while(condition)
{
    foreach(string s in list)
    {
        var breakout = false;
        switch(j)
        {
            case 1:
                //do something
                breakout = true;
                break;
            // ...
        }

        if(breakout)
        {
            break;
        }
    }
    //do some stuff
}
于 2013-05-26T17:05:09.523 回答
1

我假设您尝试做的是从开关内部中断,并让它退出 for 循环而不是 while 循环。我的建议是将整个事情放入一个函数中,并在任何你想中断的地方放置一个 return 语句。例如:

void f () {
        foreach(string s in list) {
            switch(j) {
                case 1:
                //do something
                return; 
                case 2:
                //do another
                continue;//break 
                ..other cases;
             }
         //do some stuff
        }
}

// ... later somewhere
while (condition) {
    f();
}
于 2013-05-26T17:05:53.037 回答
1

布尔状态变量应该可以解决问题:

bool isBadInput = false;
bool isRunning = true;

while(isRunning && !isBadInput){
  for(int j = 0; j < list.size() && !isBadInput; ++j){
     switch(j){
       case 0: 
         int res = handleCase0();
         if(res == -1){ 
            isBadInput = true;
            isRunning = false;
         }
         break;
      //similar for other cases
  }
}
于 2013-05-26T17:07:04.913 回答
0

我正在考虑goto,但我听说过很多关于它的坏事。

然后,您应该确保在做出决定之前充分了解情况。从GOTO 链接的文章仍然认为有害?.

编写您认为简洁地表达您的意图的代码,对您的编程语言来说是惯用的,并且最终将最容易维护。

于 2013-05-26T17:07:24.850 回答