ฉันจะออกจาก foreach loop ใน C # ได้อย่างไร


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)ในบรรทัดนี้คุณใช้ค่าบูลีน จากนั้นคุณใช้ตัว!ดำเนินการกับมัน จากนั้นหากค่าเป็นจริงคุณตั้งค่า Violated เป็น false มิฉะนั้นจะเป็นจริง (name.firstname == null)ดังนั้นโดยทั่วไปละเมิดถูกตั้งค่าเช่นเดียวกับการแสดงออกเดิม ทำไมไม่ใช้สิ่งนั้นเช่น:

Violated = (name.firstname == null);

ฉันไม่ชอบที่จะเห็นว่าไม่มีความจำเป็นหากการทดสอบและการปฏิเสธ
John Grabauskas



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 loop after break ให้ไปที่ loop beging และไม่ออกจากลูป ดังนั้นฉันจึงเปลี่ยน foreach เป็น for and break ในกรณีนี้ทำงานได้อย่างถูกต้อง - หลังจากที่โปรแกรมหยุดการไหลออกจากลูป


เอกสาร MS บอกว่าbreakหายไปและในรหัสของฉันก็ทำเช่นกันdocs.microsoft.com/en-us/dotnet/csharp/language-reference/… continueไปที่การทำซ้ำครั้งถัดไป
มิโรเจ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.