Perlでは、next;
コマンドを使ってforeach(または任意のループ)反復をスキップできます。
反復をスキップして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)? } }
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.
}
}
もう1つの方法は、ループが実行される前にLINQを使用してフィルタリングすることです。
foreach ( int number in numbers.Where(n => n >= 0) )
{
// process number
}
Ifテストを裏返すこともできます。
foreach ( int number in numbers )
{
if ( number >= 0 )
{
//process number
}
}
foreach ( int number in numbers )
{
if ( number < 0 )
{
continue;
}
//otherwise process number
}
Linqを使ったもう一つのアプローチは:
foreach ( int number in numbers.Skip(1))
{
// process number
}
あなたがアイテムの数の最初をスキップしたい場合。
スキップする条件を指定したい場合は.SkipWhere
を使用してください。
Continueステートメントを使用してください。
foreach(object o in mycollection) {
if( number < 0 ) {
continue;
}
}
これを行う最も簡単な方法は次のとおりです。
//Skip First Iteration
foreach ( int number in numbers.Skip(1))
//Skip any other like 5th iteration
foreach ( int number in numbers.Skip(5))