サンプル - C#ループ-中断と続行




while loop c# (10)

C#(他の言語でも大丈夫です)ループで、ループの構造を終了して次の反復に進むための手段としてのbreakとcontinueの違いは何ですか?

例:

foreach (DataRow row in myTable.Rows)
{
    if (someConditionEvalsToTrue)
    {
        break; //what's the difference between this and continue ?
        //continue;
    }
}

foreachループから完全に抜け出すには、 break を使います。

ループ内の次の反復に進むには、 continue が使用されます。

オブジェクトのコレクション(Datatable内の行など)をループ処理していて、特定の一致を探している場合は、その一致が見つかったときに残りの行を続行する必要がないので中断すると便利です。でる。

ループ反復の中で必要なことを達成したら、 Continue は便利です。 あなたは通常 ifの 後に 続ける でしょう。


これを理解するための本当に簡単な方法は、各キーワードの後に​​単語「ループ」を置くことです。 それらが日常のフレーズのようにただ読まれるならば、用語は今意味を成します。

ループの break - ループが break れて停止します。

continue loop - ループは次の繰り返しで実行を続けます。


他の言語に関しては:

'VB
For i=0 To 10
   If i=5 then Exit For '= break in C#;
   'Do Something for i<5
next

For i=0 To 10
   If i=5 then Continue For '= continue in C#
   'Do Something for i<>5...
Next

何人かの人が break して continue たくない人がいます。 私がそれらについて見た最新の苦情は、 JavaScript: Douglas Crockfordによる The Good Partsにあり ました。 しかし、そのうちの1つを使用すると、特にあなたの言語に do-whiledo-until スタイルのループが含まれていない場合は、物事が本当に単純化されることがあります。

リストを検索しているループで break を使用する傾向があります。 いったん見つかったら、続行する意味はありません。したがって、終了することもできます。

リストのほとんどの要素を使って何かをするときは continue を使用しますが、それでもいくつかスキップしたいと思います。

break ステートメントは、誰かからの有効な応答をポーリングするときにも役立ちます。 の代わりに:

Ask a question
While the answer is invalid:
    Ask the question

重複を排除して使用することができます。

While True:
    Ask a question
    If the answer is valid:
        break

前述した do-until ループは、その特定の問題に対するより洗練された解決策です。

Do:
    Ask a question
    Until the answer is valid

重複もなく、 break 必要ありません。


明白なことを述べさせてください:中断も継続も追加しないことであなたのプログラムを再開することに注意してください。 すなわち、私はあるエラーをトラップし、それをログに記録した後、処理を再開したいと思いました、そして次の行の間にもっと多くのコードタスクがあったので、私はそれを失敗させます。


残念ながらRubyはちょっと違います。 シモンズ:私の記憶は少し曇っています。

break / continueの代わりにbreak / nextがあります。これはループの点では同じように動作します。

ループは(他のすべてのものと同様に)式であり、最後に行ったことを「返します」。 ほとんどの場合、ループから戻り値を取得するのは無意味なので、誰もがこれを実行するだけです。

a = 5
while a < 10
    a + 1
end

あなたはこれを行うことができます

a = 5
b = while a < 10
    a + 1
end # b is now 10

しかし、多くのルビーコードはブロックを使ってループを「エミュレート」します。 標準的な例は

10.times do |x|
    puts x
end

ブロックの結果を使って物事をやりたいと思うことが人々にとってはるかに一般的であるので、これはそれが面倒になるところです。 break / nextはブロックの文脈では異なることを意味します。

breakはブロックを呼び出したコードから飛び出します

nextはブロック内の残りのコードをスキップし、指定したものをブロックの呼び出し側に '返します'。 例がないとこれは意味がありません。

def timesten
    10.times{ |t| puts yield t }
end


timesten do |x|
   x * 2
end
# will print
2
4
6
8 ... and so on


timesten do |x|
    break
    x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped

timesten do |x|
    break 5
    x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5

timesten do |x|
    next 5
    x * 2
end 
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.

そうだね。 Rubyは素晴らしいですが、いくつかのひどいコーナーケースがあります。 これは私がそれを使ってきた私の年の間に私が見た2番目に悪いものです:-)


簡単な答え:

Break は直ちにループを抜けます。
次のアイテムの処理を開始します。 (もしあれば、for / whileの評価行にジャンプして)


breakforeach ループを完全に停止し、 continue と次の DataRow スキップします。


break を使用したくない場合は、反復条件をfalseにしてループが次の反復で実行されないようにIの値を増やすだけです。

for(int i = 0; i < list.Count; i++){
   if(i == 5)
    i = list.Count;  //it will make "i<list.Count" false and loop will exit
}

breakを指定する と、プログラムカウンタは最も内側のループの範囲外にジャンプします。

for(i = 0; i < 10; i++)
{
    if(i == 2)
        break;
}

こんな感じ

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto BREAK;
}
BREAK:;

continue はループの終わりにジャンプします。 forループでは、continueはincrement式にジャンプします。

for(i = 0; i < 10; i++)
{
    if(i == 2)
        continue;

    printf("%d", i);
}

こんな感じ

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto CONTINUE;

    printf("%d", i);

    CONTINUE:;
}




enumeration