簡體   English   中英

如何退出 C# 中的 foreach 循環?

[英]How do I exit a foreach loop in C#?

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循環。 我該怎么做?

使用break


與您的問題無關,我在您的代碼中看到了這一行:

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

在這一行中,您使用一個布爾值(name.firstname == null) 然后,您應用! 運營商給它。 然后,如果值為 true,則將 Violated 設置為 false; 否則為真。 所以基本上, Violated 被設置為與原始表達式(name.firstname == null)相同的值。 為什么不使用它,如:

Violated = (name.firstname == null);

只需使用以下語句:

break;

使用break關鍵字。

看看這段代碼,它可以幫助你快速跳出循環!

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;
   }
}

在測試期間,我發現 break 之后的 foreach 循環進入循環開始而不是循環之外。 因此,我將 foreach 更改為 for 並在這種情況下 break 正常工作 - 在 break 程序流程退出循環之后。

break; - 退出 foreach

continue; - 跳轉到下一個值

而不是foreach循環

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";
    }
}

使用等效for循環

bool Violated = false;

for (int i = 0; i < parent.names.Count && !Violated; i++)
{
    var name = parent.names[i];
    
    if name.lastname == null)
    {
        Violated = true;
        this.message = "lastname reqd";
    }

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

在條件i < parent.names.Count && !Violated的情況下,您可以完全控制安全地停止循環,而不會出現任何breakreturn或任何粗暴地強制foreach停止的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM