usar sirve que para inside for como and c# .net linq lambda anonymous-methods

c# - sirve - ¿Cómo puedo usar la instrucción continue en el método.ForEach()?



for c# (6)

¿Hay un equivalente a la instrucción continue en el método 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: Gracias por todas las grandes respuestas. Y gracias por la aclaración de que .foreach no es un método de extensión. Utilizo esta estructura para mantener el estilo de codificación consistente (un programador diferente trabajó en otro método similar en la misma clase) ... y gracias por los enlaces a por qué evitar el uso de .foreach.


A) ForEach no es LINQ, es un método en la List<T> .
B) Solo usa foreach.
C) El return lo hará.

Editar

Solo para aclarar, lo que está haciendo es proporcionar un método que se llamará para cada entrada en la lista. return solo se aplicará al método para ese miembro. El resto de los miembros en la lista todavía llamarán al método.


Continuar en un foreach volverá a la parte superior del bucle hasta el siguiente elemento de la secuencia. Si eso es lo que quieres, el regreso debería hacerlo. Si desea salir por completo, es posible que desee reescribirlo utilizando un método LINQ real como Any ().


El método que está utilizando es List<T>.ForEach , un método definido en la clase y no un método de extensión LINQ. Esta pregunta en realidad no tiene nada que ver con LINQ.

return; en el delegado pasado a la List<T>.ForEach debe aproximarse usando continue; en una construcción real foreach .


Para responder tu pregunta:

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

Las otras respuestas son correctas, evita .ForEach() .
goto debe evitarse, aunque a veces es útil para bloques de código de acceso directo.


Personalmente, solo usaría un bucle foreach estándar en lugar de List<T>.ForEach .

En este caso, puede invertir la condición (para evitar el código en ese caso) o return llamada, ya que su objetivo es utilizar una instrucción de continue . Sin embargo, si quisieras break , esto no funcionaría. Dicho esto, hay muchas otras razones para evitar la List<T>.ForEach , por lo que consideraría cambiar esto a una declaración foreach normal.


Solo invierte tu condición if :

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