En Perl, je peux ignorer une itération foreach (ou n’importe quelle boucle) avec une commande next;
.
Y a-t-il un moyen de sauter une itération et de sauter à la prochaine boucle en C #?
foreach (int number in numbers)
{
if (number < 0)
{
// What goes here to skip over the loop?
}
// otherwise process number
}
Tu veux:
foreach (int number in numbers) // <--- go back to here --------+
{ // |
if (number < 0) // |
{ // |
continue; // Skip the remainder of this iteration. -----+
}
// do work
}
Voici plus sur le continue
mot-clé .
Mise à jour: En réponse à la question de suivi de Brian dans les commentaires:
Pourriez-vous préciser davantage ce que je ferais si j'avais niché pendant des boucles et si je voulais ignorer l'itération de l'une d'elles étendues?
for (int[] numbers in numberarrays) { for (int number in numbers) { // What to do if I want to // jump the (numbers/numberarrays)? } }
Un continue
s'applique toujours à la portée englobante la plus proche, vous ne pouvez donc pas l'utiliser pour sortir de la boucle la plus externe. Si une telle condition se présente, vous devrez faire quelque chose de plus compliqué en fonction de ce que vous voulez, comme break
dans la boucle interne, puis continue
dans la boucle externe. Voir ici pour la documentation sur le break
mot-clé . Le mot clé break
C # est similaire au mot clé Perl last
.
En outre, envisagez de prendre la suggestion de Dustin pour filtrer uniquement les valeurs que vous ne souhaitez pas traiter au préalable:
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.
}
}
Une autre approche consiste à filtrer à l'aide de LINQ avant que la boucle ne s'exécute:
foreach ( int number in numbers.Where(n => n >= 0) )
{
// process number
}
Vous pouvez également retourner votre si test:
foreach ( int number in numbers )
{
if ( number >= 0 )
{
//process number
}
}
foreach ( int number in numbers )
{
if ( number < 0 )
{
continue;
}
//otherwise process number
}
Une autre approche utilisant linq est:
foreach ( int number in numbers.Skip(1))
{
// process number
}
Si vous souhaitez ignorer le premier élément de plusieurs éléments.
Ou utilisez .SkipWhere
si vous souhaitez spécifier une condition à ignorer.
Vous pouvez utiliser l'instruction continue
.
Par exemple:
foreach(int number in numbers)
{
if(number < 0)
{
continue;
}
}
Utilisez l'instruction continue:
foreach(object o in mycollection) {
if( number < 0 ) {
continue;
}
}
La façon la plus simple de le faire est la suivante:
//Skip First Iteration
foreach ( int number in numbers.Skip(1))
//Skip any other like 5th iteration
foreach ( int number in numbers.Skip(5))