Czy istnieje taka instrukcja Exit For
, z wyjątkiem tego, że zamiast wyjść z pętli, po prostu przechodzi do następnej pozycji.
Na przykład:
For Each I As Item In Items
If I = x Then
' Move to next item
End If
' Do something
Next
Wiem, że mógłbym po prostu dodać Else
do instrukcji If, aby brzmiało następująco:
For Each I As Item In Items
If I = x Then
' Move to next item
Else
' Do something
End If
Next
Zastanawiam się tylko, czy istnieje sposób, aby przejść do następnej pozycji na Items
liście. Jestem pewien, że większość z nich właściwie zapyta, dlaczego po prostu nie użyć Else
instrukcji, ale dla mnie zawijanie kodu „Zrób coś” wydaje się być mniej czytelne. Zwłaszcza gdy kodu jest dużo więcej.
If
poprawnie oświadczenie. To jest mylące.Chciałbym użyć
Continue
oświadczenie zamiast:For Each I As Item In Items If I = x Then Continue For End If ' Do something Next
Zauważ, że różni się to nieco od przeniesienia samego iteratora - wszystko przed wykonaniem
If
zostanie ponownie wykonane. Zwykle tego chcesz, ale jeśli nie, będziesz musiał użyć,GetEnumerator()
a następnieMoveNext()
/Current
jawnie zamiast używaćFor Each
pętli.źródło
Co powiesz na:
If Not I = x Then ' Do something ' End If ' Move to next item '
źródło
Chcę jasno powiedzieć, że poniższy kod nie jest dobrą praktyką. Możesz użyć GOTO Label:
For Each I As Item In Items If I = x Then 'Move to next item GOTO Label1 End If ' Do something Label1: Next
źródło
Kiedy próbowałem
Continue For
to nie powiodło się, wystąpił błąd kompilatora. Robiąc to, odkryłem „Wznów”:For Each I As Item In Items If I = x Then 'Move to next item Resume Next End If 'Do something Next
Uwaga: używam tutaj VBA.
źródło
Resume Next
służy do obsługi błędów nieustrukturyzowanych.If I <> x Then
Jedynie „Kontynuuj dla” jest akceptowalnym standardem (reszta prowadzi do „kodu spaghetti”).
Przynajmniej przy „kontynuuj dla” programista wie, że kod przechodzi bezpośrednio na początek pętli.
Jednak dla purystów coś takiego jest najlepsze, ponieważ jest to czysty kod „nie spaghetti”.
Dim bKeepGoing as Boolean For Each I As Item In Items bKeepGoing = True If I = x Then bKeepGoing = False End If if bKeepGoing then ' Do something endif Next
Jednak dla ułatwienia kodowania „Kontynuuj dla” jest OK. (Ale dobry pomysł, żeby to skomentować).
Korzystanie z opcji „Kontynuuj dla”
For Each I As Item In Items If I = x Then Continue For 'skip back directly to top of loop End If ' Do something Next
źródło