2009-05-06 16 views
73

C'è una posizione come Exit For, eccetto che invece di uscire dal ciclo, si passa all'elemento successivo.VB.NET - Come passare all'elemento successivo a Per ogni ciclo?

Ad esempio:

For Each I As Item In Items 

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

    ' Do something 

Next 

So potrebbe semplicemente aggiungere un Else alla dichiarazione Se così fosse sarebbe letto come segue:

For Each I As Item In Items 

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

Next 

Basta chiedersi se c'è un modo per saltare alla voce successiva nell'elenco Items. Sono sicuro che la maggior parte starà chiedendo perché non usare semplicemente l'istruzione Else, ma per me il wrapping del codice "Do Something" sembra essere meno leggibile. Soprattutto quando c'è molto più codice.

risposta

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

    ' Do something 
Next 
+0

Grazie questo è esattamente quello che stavo cercando, divertente come non è nella documentazione MSDN ?? (http://msdn.microsoft.com/en-us/library/5ebk1751.aspx) Anche congratulazioni per aver battuto Jon sul posto, di ben 20 secondi! :) –

+5

Ho quasi ricevuto Skeeted ancora una volta! ;) –

41

userei la dichiarazione Continue invece:

For Each I As Item In Items 

    If I = x Then 
     Continue For 
    End If 

    ' Do something 

Next 

Si noti che questo è leggermente diverso per spostare l'iteratore stesso on - nulla prima verrà eseguito di nuovo il If. Di solito questo è quello che vuoi, ma se non dovresti usare GetEnumerator() e poi MoveNext()/Current piuttosto che usare un ciclo For Each.

3

Che dire:

If Not I = x Then 

    ' Do something ' 

End If 

' Move to next item ' 
2

Voglio essere chiaro che il seguente codice non è una buona pratica. È possibile utilizzare GOTO Etichetta:

For Each I As Item In Items 

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

    ' Do something 
    Label1: 
Next 
+15

Si potrebbe, ma per favore non farlo. – MiseryIndex

+0

dovuto saltare, quindi è cattivo. –

+2

Se non è una buona pratica, e c'è una soluzione chiaramente migliore supportata dalla lingua (Continua per/Riprendi successivo), forse questa risposta dovrebbe essere rimossa volontariamente. – eniacAvenger

1

Quando ho provato Continue For non è riuscito, ho ottenuto un errore di compilazione. Mentre lo facevo, ho scoperto "Resume":

For Each I As Item In Items 

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

    'Do something 

Next 

Nota: sto utilizzando VBA qui.

+0

Questo codice non funziona nemmeno in VBA. 'Resume Next' è per la gestione degli errori non strutturati. –

Problemi correlati