1. ホーム
  2. c#

[解決済み】`foreach`ループの反復をスキップするにはどうしたらいいですか?

2022-04-14 17:30:24

質問

Perl では、foreach (または任意のループ) の反復をスキップするには next; コマンドを使用します。

C#でイテレーションをスキップして次のループに飛ぶ方法はありますか?

 foreach (int number in numbers)
 {
     if (number < 0)
     {
         // What goes here to skip over the loop?
     }

     // otherwise process number
 }

解決方法は?

欲しいのは

foreach (int number in numbers) //   <--- go back to here --------+
{                               //                                |
    if (number < 0)             //                                |
    {                           //                                |
        continue;   // Skip the remainder of this iteration. -----+
    }

    // do work
}

ここでは、さらに continue キーワード .


更新しました。 コメントでのBrianのフォローアップの質問に答えて。

ネストされたforループがあり、拡張されたループの1つの反復をスキップしたい場合、どうすればよいか、さらに明確に教えてください。

for (int[] numbers in numberarrays) {
  for (int number in numbers) { // What to do if I want to
                                // jump the (numbers/numberarrays)?
  }
}

A continue は常に最も近いスコープに適用されるため、一番外側のループから抜け出すために使うことはできません。もしそのような条件が発生したら、何をしたいのかによって、もっと複雑なことをする必要があります。 break を実行すると、内側のループから continue を外側のループで使用します。に関するドキュメントはこちらをご覧ください。 break キーワード . その break C#のキーワードは、Perlの last というキーワードがあります。

また、Dustinの提案を受けて、処理したくない値だけをあらかじめフィルタリングしておくことも検討してみてください。

foreach (var basket in baskets.Where(b => b.IsOpen())) {
  foreach (var fruit in basket.Where(f => f.IsTasty())) {
    cuteAnimal.Eat(fruit); // Om nom nom. You don't need to break/continue
                           // since all the fruits that reach this point are
                           // in available baskets and tasty.
  }
}