「if」ステートメントがtrueの場合、foreachループの下のコードをスキップして、プログラムの残りの部分を続行するには、どうすればよいですか。
void()
{
foreach()
{
if()
{
}
}
//code I want to skip if "if" statement is true
}
「if」ステートメントがtrueの場合、foreachループの下のコードをスキップして、プログラムの残りの部分を続行するには、どうすればよいですか。
void()
{
foreach()
{
if()
{
}
}
//code I want to skip if "if" statement is true
}
やりたいことを直接行う方法はありませんが(「goto」ラベルがないと、考えが失われます!)、「break」キーワードを使用して、後で参照できる変数を設定できます。
void()
{
var testWasTrue = false;
foreach()
{
if()
{
testWasTrue = true;
break; // break out of the "foreach"
}
}
if( !testWasTrue ) {
//code I want to skip if "if" statement is true
}
}
私はこれがすでに答えられていることを知っていますが、チェックを別の方法に抽象化することを誰も考えていなかったので、私は2セントを投入すると思いました:
void()
{
if (ShouldDoStuff(myCollection))
DoStuff(myCollection);
else
DoOtherStuff(myCollection);
}
private bool ShouldDoStuff(collection)
{
foreach()
{
if ()
return true;
}
return false;
}
これにより、アルゴリズムを処理するためのよりクリーンなコードがより高いレベルで提供され、説明されているすべての混乱が解消されます。アクションをチェックして実行するタスクを明確に分離し、void()
読者は、ブール値やブレークロジックが潜んでいるときに何をしているのかを識別しなくても、プログラムフローが何であるかを即座に正確に知ることができます。1つの方法に複数の責任またはタスクがあることはありません。
ええ、ポスターが彼らの前で他の仕事をしたいと思っている可能性はありますが、それはまったく異なる議論であり、彼らの質問で説明されたものではありません。特定のコレクション(またはオブジェクト)が特定の条件を満たすかどうかを単にチェックしたい場合は、そのチェックを別のメソッドに移動できます。3つのコンポーネントすべての自動化された単体テストのためにドアを開いたままにしておきます。
DoStuff
とDoOtherStuff
が独自のメソッドに抽象化されていない場合でも、読みやすさと論理フローが向上します。
私のコメントで述べたように、追加のブール変数を使用してこれを行うことができます。
void()
{
bool positiveResult; // by default it gets false value
foreach()
{
if()
{
positiveResult = true;
// you may use "break" to skip the loop
break;
}
}
if( !positiveResult )
{
//code I want to skip if "if" statement is true
}
}
'break'キーワードは、ループから抜け出します。
foreach (someClass a in someArray)
{
if(a.someProperty) // bool property
{
//Stuff to do if that condition is true
doSomethingElse();
//Calling the break keyword will stop the loop and jump immediately outside of it
break;
}
//Other code to run for each iteration of the loop
}
//Here is where execution will pick up either after break is called or after the loop finishes
void()
{
bool process = true;
foreach()
{
if()
{
process = false;
break;
}
}
if (process)
{
//code I want to skip if "if" statement is true
}
}
void()
{
bool skip = false;
foreach()
{
if()
{
skip = true;
}
}
if(!skip)
{
//code I want to skip if "if" statement is true
}
}
ブールフラグがどのようになっているのかを知る唯一の方法です。
void()
{
bool x = false;
foreach()
{
if()
{
x = true;
break;
}
}
if(!x)
{
//Code to skip if "if" statement is true.
}
}
あまりエレガントではありませんが、簡単です。編集:12秒ビート:)
繰り返し処理するコレクションにIEnumerableインターフェイスが含まれている場合は、LambdaでAny()を使用できます。
int[] myArray = { 1, 2, 3 };
if( myArray.Any((a) => a == 1) )
{
return;
}
読み取られます。配列にaが1に等しい値aが含まれている場合は、この関数から戻ります。
さらに、読みにくくしたい場合は、中括弧/中括弧を省略できます。
if( myArray.Any((a) => a == 1) )
return;