2009-05-06 27 views
73

Hay una sentencia como Exit For, excepto que en lugar de salir del bucle solo pasa al siguiente elemento.VB.NET - Cómo pasar al siguiente elemento a Para cada bucle?

Por ejemplo:

For Each I As Item In Items 

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

    ' Do something 

Next 

Sé que podría simplemente añadir una Else a la declaración Si lo que sería el siguiente:

For Each I As Item In Items 

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

Next 

preguntando si hay una manera de saltar al siguiente elemento en la lista Items. Estoy seguro de que la mayoría preguntará por qué no solo usa la declaración Else, pero para mí, el código "Do Something" parece ser menos legible. Especialmente cuando hay mucho más código.

Respuesta

141
For Each I As Item In Items 
    If I = x Then Continue For 

    ' Do something 
Next 
+0

Gracias, esto es exactamente lo que estaba buscando, gracioso, ¿cómo no está en la documentación de MSDN? (http://msdn.microsoft.com/en-us/library/5ebk1751.aspx) ¡Felicidades por superar a Jon en la publicación por 20 segundos! :) –

+5

¡Casi me mata una vez más! ;) –

41

que haría uso de la declaración Continue lugar:

For Each I As Item In Items 

    If I = x Then 
     Continue For 
    End If 

    ' Do something 

Next 

Tenga en cuenta que esto es un poco diferente a mover el iterador en sí - nada antes de la If se ejecutará de nuevo. Por lo general, esto es lo que quiere, pero si no, tendrá que usar GetEnumerator() y luego MoveNext()/Current explícitamente en lugar de usar un bucle For Each.

3

¿Qué hay de:

If Not I = x Then 

    ' Do something ' 

End If 

' Move to next item ' 
2

Quiero ser claro que el siguiente código no es una buena práctica. Se puede utilizar GOTO Etiqueta:

For Each I As Item In Items 

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

    ' Do something 
    Label1: 
Next 
+15

Podría, pero no lo haga. – MiseryIndex

+0

Debido a un salto, por lo tanto, es malo. –

+2

Si no es una buena práctica, y hay una solución claramente mejor que el idioma admite (Continuar para/Continuar siguiente), tal vez esta respuesta se elimine voluntariamente. – eniacAvenger

1

Cuando traté Continue For Fracasó, tengo un error de compilación. Al hacer esto, descubrí 'Currículum':

For Each I As Item In Items 

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

    'Do something 

Next 

Nota: Estoy usando VBA aquí.

+0

Este código ni siquiera funciona en VBA. 'Resume Next' es para el manejo de errores no estructurados. –

Cuestiones relacionadas