c# - usar - ¿Cómo me salto una iteración de un bucle `foreach`?
foreach next c# (7)
En Perl puedo omitir una iteración foreach (o cualquier bucle) con una next;
mando.
¿Hay alguna forma de saltear una iteración y saltar al siguiente bucle en C #?
foreach (int number in numbers)
{
if (number < 0)
{
// What goes here to skip over the loop?
}
// otherwise process number
}
Otro enfoque es filtrar utilizando LINQ antes de que se ejecute el bucle:
foreach ( int number in numbers.Where(n => n >= 0) )
{
// process number
}
Otro enfoque usando linq es:
foreach ( int number in numbers.Skip(1))
{
// process number
}
Si desea omitir el primero en una serie de elementos.
O use .SkipWhere
si desea especificar una condición para omitir.
Puede utilizar la instrucción continue
.
Por ejemplo:
foreach(int number in numbers)
{
if(number < 0)
{
continue;
}
}
También puedes voltear tu si prueba:
foreach ( int number in numbers )
{
if ( number >= 0 )
{
//process number
}
}
Usted quiere:
foreach (int number in numbers) // <--- go back to here --------+
{ // |
if (number < 0) // |
{ // |
continue; // Skip the remainder of this iteration. -----+
}
// do work
}
Aquí hay más información sobre la palabra clave continue
.
Actualización: En respuesta a la pregunta de seguimiento de Brian en los comentarios:
¿Podría aclarar más qué haría si hubiera anidado bucles y quisiera omitir la iteración de uno de los extendidos?
for (int[] numbers in numberarrays) { for (int number in numbers) { // What to do if I want to // jump the (numbers/numberarrays)? } }
Una continue
siempre se aplica al ámbito de cierre más cercano, por lo que no podría usarlo para salir del bucle más externo. Si surge una condición como esa, necesitaría hacer algo más complicado dependiendo de exactamente lo que quiere, como break
del bucle interno, y luego continue
en el bucle externo. Consulte aquí la documentación sobre la palabra clave break
. La palabra clave break
C # es similar a la last
palabra clave de Perl.
Además, considere tomar la sugerencia de Dustin para simplemente filtrar los valores que no desea procesar de antemano:
foreach (var basket in baskets.Where(b => b.IsOpen())) {
foreach (var fruit in basket.Where(f => f.IsTasty())) {
cuteAnimal.Eat(fruit); // Om nom nom. You don''t need to break/continue
// since all the fruits that reach this point are
// in available baskets and tasty.
}
}
Utilice la instrucción continue:
foreach(object o in mycollection) {
if( number < 0 ) {
continue;
}
}
foreach ( int number in numbers )
{
if ( number < 0 )
{
continue;
}
//otherwise process number
}