1

whileループがあり、このwhile loop中にforeach loop.

ここでは、 を使用してループで現在の対話をスキップする方法を学びましたContinue; Return; Breakwhile loopしかし、私が中にいるとき、私は去る必要がありforeach loopます。それは可能ですか?

の中でインタラクションを行っています。 foreach loopforeach を離れて の次のインタラクションに進みたいですwhile。どうすればいいですか?そのようです:

while (!reader.EndOfStream)  //COMEÇO DO WHILE
{
  ///Some Codes

  foreach(string s in checkedlistbox1.items)
        {
          switch(s)
           {
             case "1":
                if( 1 > 0)
                 {
                    ///HERE I WANT TO GO TO THE NEXT INTERACTION OF THE WHILE
                    ///When I use CONTINUE; HERE, I GO TO THE NEXT INTERACTION OF THE FOREACH. BUT I NEED TO GO TO THE NEXT OF THE WHILE.
                 }
           }
        }
}

これが私がしたいことです:私はfile.txtを1行ずつ読んでいて、これらの値と他のいくつかのもので新しいものを書いています... aが空requiredの場合、これらの値のいくつかは(ユーザーによって設定されます)required field、だから何もせず、次へwhile interaction

4

8 に答える 8

4

変数を設定しながら、スイッチからブレークしてからforeachからブレークする必要があります。

continue次に、その変数をチェックして、次のwhile反復を実行する必要があるかどうかを確認できます。

このようにしてください:

while (!reader.EndOfStream)
{
    // Some Codes

    bool skipToNext = false;

    foreach (string s in checkedlistbox1.items)
    {
        switch (s)
        {
            case "1":
                if (1 > 0)
                {
                    skipToNext = true;
                    break;
                }
        }

        if (skipToNext) break;
    }

    // in the case of there being more code, you can now use continue
    if (skipToNext) continue;

    // more code
}

このフローの動作例

var list = new List<string> { "0", "1", "2" };
int a = 0, b = 2;

while (a++ < b)
{
    // Some Codes

    bool skipToNext = false;

    foreach (string s in list)
    {
        Debug.WriteLine("{0} - {1}", a, s);

        switch (s)
        {
            case "1":
                if (1 > 0)
                {
                    Debug.WriteLine("Skipping switch...");
                    skipToNext = true;
                    break;
                }
        }

        if (skipToNext)
        {
            Debug.WriteLine("Skipping foreach...");
            break;
        }
    }

    // in the case of there being more code, you can now use continue
    if (skipToNext)
    {
        Debug.WriteLine("Skipping to next while...");
        continue;
    }

    // more code
}

出力:

1 - 0
1 - 1
Skipping switch...
Skipping foreach...
Skipping to next while...
2 - 0
2 - 1
Skipping switch...
Skipping foreach...
Skipping to next while...
于 2013-02-19T13:14:33.580 に答える
1

1) はい、可能です。できます。

 foreach() {
    while() {
       break; //leave the while
    }
    //... and continues from here
 }

2) 各 while は次の foreach 反復の前に終了するため、2 番目の質問はあまり意味がありません... foreach 内で次を開始することを意味しない限り、その場合..はい!

 foreach() {
    while() {
       ...
    }
    break; //will go to the next foreach iteration, i.e. starts a new while
 }

コードサンプルに関しては、コメントで言及したポイントを中断すると、必要なことが行われます (foreach を終了し、自然に次の反復に進みます)。

編集:例を投稿した後、問題はwhileとforeachの間の相互作用ではなく、スイッチにあるようです:breakは、「ループ内の次の反復に進む」と「これを終了する」の両方のキーワードとして使用されますケースとスイッチ」。

ブレークは、コンパイラによって「スイッチ ブレーク」として認識されます。自分で動作を模倣する必要があります。

    foreach(string s in checkedlistbox1.items)
    {
      bool dobreak = false;
      switch(s)
       {
         case "1":
            if( 1 > 0)
             {
                dobreak = true;
             }
             break; // exit the case
       }
       if (dobreak)
          break; // exits the for (it is a 'foreach-break')
    }
于 2013-02-19T13:10:18.323 に答える
1
bool dobreak = false;
while (!reader.EndOfStream && !dobreak )  //COMEÇO DO WHILE
{
  ///Some Codes

  foreach(string s in checkedlistbox1.items)
        {
          switch(s)
           {
             case "1":
                if( 1 > 0)
                 {
                    dobreak = true;
                    break;
                 }
           }
        }
}
于 2013-02-19T13:12:25.987 に答える
0

テストされていませんが、これらはあなたの質問に答えるべきいくつかの可能な方法です:

bool continueLooping = true;

string[] array = { "1", "2" };

while (continueLooping)
{
    foreach (string x in array)
    {
        // break out of foreach loop AND while loop
        if (x == "1")
        {
            continueLooping = false;
            break;
        }

        // go to next iteration of foreach loop
        if (x == "2")
        {
            continue;
        }

        // break out of foreach loop and continue while loop
        if (x == "3")
        {
            break;
        }
    }
}
于 2013-02-19T13:14:47.253 に答える
0

多くの場合、ネストされたループは、メソッドを分割する必要があることを示しています。

この例では、コードをより明確にすることができます。内側のforループを別のメソッドに配置すると、そのメソッドがbool. 外側のループの繰り返しを続けtrueたい場合は戻ります。それ以外の場合は、ループを終了する場合whileは returnします。falsewhile

次のようになります。

private void doSomething(StreamReader reader)
{
    while (!reader.EndOfStream)
    {
        // Some Codes...

        if (!processNextItem(reader))
        {
            break;
        }
    }
}

// Returns true if the caller should continue its while loop; false if it should exit it.

private bool processNextItem(StreamReader reader)
{
    foreach (string s in checkedlistbox1.items)
    {
        switch (s)
        {
            case "1":
                if (1 > 0)
                {
                    return false; // Return false to exit while loop.
                }
        }
    }

    return true; // Return true to continue while loop.
}

何に渡す必要があるのか​​ わかりませんprocessNextItem()。私はちょうどreader例として合格しました。

于 2013-02-19T13:30:48.037 に答える
0

あなたはあなたforeachと次のwhileように何かを破る必要があります:

bool abort = false;
while (!reader.EndOfStream && !abort)  //COMEÇO DO WHILE
{
  ///Some Codes

  foreach(string s in checkedlistbox1.items)
        {
          switch(s)
           {
             case "1":
                if( 1 > 0)
                 {
                    ///HERE I WANT TO LEAVE TO THE NEXT INTERACTION OF THE WHILE
                    abort = true;
                    break;
                 }
           }

           if (abort)
           {
               break;
           }
    }
}
于 2013-02-19T13:16:14.203 に答える
0

goto を試すことができます。

while (true)
{
 foreach(string s in checkedlistbox1.items)
  {
   switch(s)
   {
     case "1":
        if( 1 > 0)
        {
          goto WhileOut;
        }
    }
  }
}
WhileOut:
      // some code
于 2013-02-19T13:18:28.600 に答える
0

私は C# の初心者ですが、while ループに自分で設定できる別の条件を追加することをお勧めします。その後、必要に応じて変更してください。例えば:

MyKeyCondition = 0;

while(MainCondition||MyKeyCondition){

if(MyCheckCondition){
MyKeyCondition = 1;
}

}

これで、キー条件を変更すると、メイン条件が満たされていない場合でも while ループを処理できます。

于 2013-02-19T13:16:35.573 に答える