Как я могу использовать оператор 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.
Ответы
Ответ 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
следует избегать, хотя иногда полезно для сокращения блоков кода.