Есть ли такой статус, как 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" кажется менее читаемой. Особенно, когда кода намного больше.
For Each I As Item In Items
If I = x Then Continue For
' Do something
Next
Вместо этого я бы использовал инструкцию 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
.
Как насчет:
If Not I = x Then
' Do something '
End If
' Move to next item '
Я хочу быть ясным, что следующий код не является хорошей практикой. Вы можете использовать метку GOTO:
For Each I As Item In Items
If I = x Then
'Move to next item
GOTO Label1
End If
' Do something
Label1:
Next
Когда я попробовал 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.
Resume Next
для неструктурированной обработки ошибок.