C#でforeachループを終了するにはどうすればよいですか?


88
foreach (var name in parent.names)
{
    if name.lastname == null)
    {
        Violated = true;
        this.message = "lastname reqd";
    }

    if (!Violated)
    {
        Violated = !(name.firstname == null) ? false : true;
        if (ruleViolated)
            this.message = "firstname reqd";
    }
}

違反が真実であるときはいつでも、私はforeachすぐにループから抜け出したいです。どうすればいいのですか?

回答:


212

を使用しbreakます。


あなたの質問とは関係なく、私はあなたのコードに次の行を見ます:

Violated = !(name.firstname == null) ? false : true;

この行では、ブール値を取ります(name.firstname == null)。次に、!演算子を適用します。次に、値がtrueの場合、Violatedをfalseに設定します。それ以外の場合はtrue。したがって、基本的に、Violatedは元の式と同じ値に設定されます(name.firstname == null)。次のように、それを使用してみませんか。

Violated = (name.firstname == null);

テストと否定が不必要だとは思わない。
JohnGrabauskas19年



10

このコードを見てください。ループからすばやく抜け出すのに役立ちます。

foreach (var name in parent.names)
{
   if (name.lastname == null)
   {
      Violated = true;
      this.message = "lastname reqd";
      break;
   }
   else if (name.firstname == null)
   {
      Violated = true;
      this.message = "firstname reqd";
      break;
   }
}

0

テスト中に、ブレーク後のforeachループは、ループの外ではなく、ループの開始に移動することがわかりました。そのため、foreachをforに変更し、この場合はbreakが正しく機能します-breakプログラムフローがループから外れた後。


MSのドキュメントによるbreakと、私のコードではdocs.microsoft.com/en-us/dotnet/csharp/language-reference/… continueも次のイテレーションに進みます。
ミロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.