Подтвердить что ты не робот

Как я могу использовать оператор continue в методе .ForEach()

Есть ли эквивалент инструкции continue в методе ForEach?

List<string> lst = GetIdList();
lst.ForEach(id =>
{
     try
     {
       var article = GetArticle(id);
       if (article.author.contains("Twain"))
       {
         //want to jump out of the foreach now
         //continue; **************this is what i want to do*******

       }

       //other code follows
   }

EDIT: Спасибо за все замечательные ответы. И спасибо за разъяснение, что, прежде чем это не метод расширения. Я использую эту структуру, чтобы сохранить стиль кодирования согласованным (другой программист работал над другим аналогичным методом в одном классе)... и спасибо за ссылки на почему, чтобы избежать использования .foreach.

4b9b3361

Ответ 1

Лично я бы просто использовал стандартный цикл foreach вместо List<T>.ForEach.

В этом случае вы можете инвертировать условие (чтобы избежать кода в этом случае) или вызвать return, так как ваша цель состоит в использовании оператора continue. Однако, если вы хотите break, это не сработает. Тем не менее, существует довольно много причин, чтобы избежать List<T>.ForEach, поэтому я бы предпочел переключить его на нормальный оператор foreach.|

Ответ 2

A) ForEach не LINQ, это метод на List<T>.
B) Просто используйте foreach.
C) return сделает это.

Edit

Чтобы уточнить, что вы делаете, это метод, который будет вызываться для каждой записи в списке. return будет применяться только к методу для этого элемента. Остальные члены в списке все равно вызовут метод.

Ответ 3

Просто инвертируйте условие if:

lst.ForEach(id => {
                      var article = GetArticle(id);
                      if (!article.author.contains("Twain"))
                      {
                          // other code here
                      }
                  });

Ответ 4

Используемый метод List<T>.ForEach - метод, определенный для класса, а не метод расширения LINQ. Этот вопрос фактически не имеет ничего общего с LINQ.

return; в делетете, переданном List<T>.ForEach, должен аппроксимироваться с помощью continue; в фактической конструкции foreach.

Ответ 5

Продолжить в foreach будет циклический возврат к вершине цикла к следующему элементу в последовательности. Если это то, что вы хотите, возвращение должно это сделать. Если вы хотите полностью выйти, вы можете переписать его с помощью метода LINQ, такого как Any().

Ответ 6

Чтобы ответить на ваш вопрос:

List<string> lst = GetIdList();
lst.ForEach(id =>
{
    try
    {
        var article = GetArticle(id);
        if (article.author.contains("Twain"))
            goto _continue;
    }

    //other code follows

    _continue:;
}

Другие ответы правильные, избегайте .ForEach().
goto следует избегать, хотя иногда полезно для сокращения блоков кода.