97 votes

VB.NET - Comment passer à l'élément suivant dans une boucle For Each ?

Y a-t-il une déclaration comme Exit For sauf qu'au lieu de sortir de la boucle, il passe simplement à l'élément suivant.

Par exemple :

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    End If

    ' Do something

Next

Je sais que je pourrais simplement ajouter un Else à la déclaration "Si" pour qu'elle se lise comme suit :

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    Else
        ' Do something
    End If

Next

Je me demandais juste s'il y avait un moyen de passer à l'élément suivant dans la liste d'éléments de la base de données. Items la liste. Je suis sûr que la plupart des gens se demanderont, à juste titre, pourquoi ne pas simplement utiliser l'option Else mais pour moi, envelopper le code "Do Something" me semble moins lisible. Surtout quand il y a beaucoup plus de code.

182voto

Adam Robinson Points 88472
For Each I As Item In Items
    If I = x Then Continue For

    ' Do something
Next

0 votes

Merci, c'est exactement ce que je cherchais, c'est drôle que ce ne soit pas dans la documentation MSDN ? ( msdn.microsoft.com/fr/us/library/5ebk1751.aspx ) Félicitations aussi pour avoir battu Jon au poteau, de 20 secondes :)

1 votes

Vous feriez mieux de fermer le If correctement. Elle est trompeuse.

50voto

Jon Skeet Points 692016

J'utiliserais le Continue à la place :

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

Notez que c'est légèrement différent du déplacement de l'itérateur lui-même - tout ce qui se trouve avant la balise If sera à nouveau exécuté. En général, c'est ce que vous voulez, mais sinon vous devrez utiliser GetEnumerator() et ensuite MoveNext() / Current explicitement plutôt que d'utiliser un For Each boucle.

4voto

timo2oo8 Points 136

Qu'en est-il :

If Not I = x Then

  ' Do something '

End If

' Move to next item '

1voto

Syed Tayyab Ali Points 1667

Je tiens à préciser que le code suivant n'est pas une bonne pratique. Vous pouvez utiliser l'étiquette GOTO :

For Each I As Item In Items

    If I = x Then
       'Move to next item
        GOTO Label1
    End If

    ' Do something
    Label1:
Next

26 votes

Vous pourriez, mais ne le faites pas.

0 votes

En raison du saut, c'est donc mauvais.

4 votes

Si ce n'est pas une bonne pratique et qu'il existe une solution nettement meilleure prise en charge par la langue (Continuer pour / Reprendre après), cette réponse devrait peut-être être supprimée volontairement.

0voto

Karmendra Points 19

Quand j'ai essayé Continue For it Failed, I got a compiler error. En faisant cela, j'ai découvert 'Resume' :

For Each I As Item In Items

    If I = x Then
       'Move to next item
       Resume Next
    End If

    'Do something

Next

Remarque : j'utilise ici le VBA.

2 votes

Ce code ne fonctionne même pas en VBA. Resume Next est destiné à la gestion des erreurs non structurées.

0 votes

Vous devez utiliser une grande instruction IF pour terminer la boucle en VBA, car il n'y a pas d'instruction continue. Ainsi, If I <> x Then

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X