如何进行双循环跳转?

时间:2013-05-26 16:56:29

标签: c# loops foreach switch-statement

我有一个代码:

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 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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();
}

答案 2 :(得分: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
  }
}

答案 3 :(得分:0)

  

我正在考虑goto,但我听到很多不好的事情。

然后,您应确保在做出决定之前获得充分信息。从GOTO still considered harmful?链接的文章深入讨论了这一主题。

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