VB.NET - Как перейти к следующему пункту a For Each Loop?

67

Есть ли такой статус, как Exit For, но вместо того, чтобы выйти из цикла, он просто переходит к следующему элементу.

Например:

For Each I As Item In Items

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

    ' Do something

Next

Я знаю, может просто добавить Else в оператор If, чтобы он читал следующее:

For Each I As Item In Items

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

Next

Просто интересно, есть ли способ перейти к следующему элементу в списке Items. Я уверен, что большинство из них правильно спросят, почему бы просто не использовать оператор Else, но для меня упаковка кода "Do Something" кажется менее читаемой. Особенно, когда кода намного больше.

Теги:
loops

5 ответов

136
Лучший ответ
For Each I As Item In Items
    If I = x Then Continue For

    ' Do something
Next
  • 0
    Спасибо, это именно то, что я искал, забавно, как это не в документации MSDN ?? ( msdn.microsoft.com/en-us/library/5ebk1751.aspx ) Также поздравляю с избиением Джона постом на целых 20 секунд! :)
  • 6
    Я чуть не получил Skeeted еще раз! ;)
38

Вместо этого я бы использовал инструкцию Continue:

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

Обратите внимание, что это немного отличается от перемещения самого итератора - ничего перед тем, как If будет выполнен снова. Обычно это то, что вы хотите, но если нет, вам придется использовать GetEnumerator(), а затем MoveNext()/Current явно, а не использовать цикл For Each.

3

Как насчет:

If Not I = x Then

  ' Do something '

End If

' Move to next item '
3

Я хочу быть ясным, что следующий код не является хорошей практикой. Вы можете использовать метку GOTO:

For Each I As Item In Items

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

    ' Do something
    Label1:
Next
  • 18
    Вы могли бы, но, пожалуйста, не надо.
  • 0
    Из-за прыжка, поэтому это плохо.
Показать ещё 1 комментарий
1

Когда я попробовал Continue For, он сработал, я получил ошибку компилятора. Выполняя это, я обнаружил "Возобновить":

For Each I As Item In Items

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

    'Do something

Next

Примечание: здесь я использую VBA.

  • 1
    Этот код даже не работает в VBA. Resume Next для неструктурированной обработки ошибок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню