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
}
});