Як вийти з циклу foreach у C #?


85
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циклу. Як це зробити?

Відповіді:


208

Використовуйте break.


Не пов'язане з вашим запитанням, я бачу у вашому коді рядок:

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

У цьому рядку ви берете логічне значення (name.firstname == null). Потім ви застосовуєте до нього !оператор. Потім, якщо значення істинне, ви встановлюєте для Violated значення false; інакше - істинно. Отже, в основному для Violated встановлено те саме значення, що і вихідний вираз (name.firstname == null). Чому б не використовувати це, як у:

Violated = (name.firstname == null);

Я не люблю бачити непотрібних тестів і заперечень.
Джон Грабаускас,



9

Подивіться на цей код, він може допомогти вам швидко вийти з циклу!

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 в цьому випадку працюю правильно - після перерви потік програми виходить із циклу.


Документи MS кажуть break, що згасає , і в моєму коді це також робиться docs.microsoft.com/en-us/dotnet/csharp/language-reference/ ...continue переходить до наступної ітерації.
Міро Дж.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.