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 に答える