Pytanie VB.NET - Jak przejść do następnego elementu a For Each Loop?


Czy jest takie ogłoszenie? Exit For, oprócz tego, że zamiast wychodzić z pętli, po prostu przechodzi do następnego elementu.

Na przykład:

For Each I As Item In Items

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

    ' Do something

Next

Wiem, może po prostu dodać Else do instrukcji If, więc brzmiałoby to 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ę, czy istnieje sposób, aby przejść do następnego elementu w Items lista. Jestem pewien, że większość będzie właściwie pytać, dlaczego nie po prostu użyć Else oświadczenie, ale dla mnie zawijanie kodu "Zrób coś" wydaje się mniej czytelne. Zwłaszcza, gdy jest o wiele więcej kodu.


76
2018-05-06 13:53


pochodzenie




Odpowiedzi:


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

    ' Do something
Next

148
2018-05-06 13:56



Dzięki temu dokładnie to, czego szukałem, zabawne, jak to nie jest w dokumentacji MSDN ?? (msdn.microsoft.com/en-us/library/5ebk1751.aspx) Gratuluję również pokonania Jona na stanowisku przez całe 20 sekund! :) - Sean Taylor
Niedługo znów zdobyłem Skeeteda! ;) - Adam Robinson


Używałbym Continue oświadczenie zamiast:

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

Zauważ, że to nieco różni się od samego iteratora - wszystko przed If zostanie ponownie wykonane. Zwykle to jest to, czego chcesz, ale jeśli nie, będziesz musiał użyć GetEnumerator() i wtedy MoveNext()/Current jawnie zamiast używać a For Each pętla.


42
2018-05-06 13:56





Co powiesz na:

If Not I = x Then

  ' Do something '

End If

' Move to next item '

3
2018-05-06 13:57





Chcę być jasne, ż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

2
2018-05-06 13:59



Mógłbyś, ale proszę, nie rób tego. - MiseryIndex
Ze względu na skok, dlatego jest zły. - Syed Tayyab Ali
Jeśli nie jest to dobra praktyka i istnieje wyraźnie lepsze rozwiązanie, które obsługuje język (Kontynuuj / Wznów Dalej), może ta odpowiedź powinna zostać dobrowolnie usunięta. - eniacAvenger


Kiedy próbowałem Continue For nie powiodło się, wystąpił błąd kompilatora. Robiąc to, odkryłem "Resume":

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.


0
2017-09-28 11:28



Ten kod nie działa nawet w VBA. Resume Next służy do niestrukturalnej obsługi błędów. - Daniel