Как выйти из вложенных или циклических в vb.net?
Я попытался использовать exit, но он прыгнул или разбился только на один цикл.
Как я могу сделать это для следующего:
for each item in itemList
for each item1 in itemList1
if item1.text = "bla bla bla" then
exit for
end if
end for
end for
К сожалению, нет инструкции exit two levels of for
, но есть несколько способов обхода:
Goto. В общем случае использование goto
считается плохой практикой (и это справедливо), но используя goto
исключительно для прямого перехода из структурированные операторы управления обычно считаются ОК, особенно если альтернатива заключается в более сложном коде.
For Each item In itemList
For Each item1 In itemList1
If item1.Text = "bla bla bla" Then
Goto end_of_for
End If
Next
Next
end_of_for:
Маскированный внешний блок
Do
For Each item In itemList
For Each item1 In itemList1
If item1.Text = "bla bla bla" Then
Exit Do
End If
Next
Next
Loop While False
или
Try
For Each item In itemlist
For Each item1 In itemlist1
If item1 = "bla bla bla" Then
Exit Try
End If
Next
Next
Finally
End Try
Отдельная функция. Поместите петли внутри отдельной функции, с которой можно выйти с помощью return
. Это может потребовать, чтобы вы передавали множество параметров, хотя, в зависимости от того, сколько локальных переменных вы используете внутри цикла. Альтернативой было бы превратить блок в многострочный лямбда, поскольку это создаст замыкание над локальными переменными.
Логическая переменная. Это может сделать ваш код немного менее читаемым, в зависимости от того, сколько слоев вложенных циклов у вас есть:
Dim done = False
For Each item In itemList
For Each item1 In itemList1
If item1.Text = "bla bla bla" Then
done = True
Exit For
End If
Next
If done Then Exit For
Next
goto
кроме функции, если это действительно имеет смысл.
goto
в большом проекте, чтобы вспомнить мои дни программирования в qbasic, ах такие невинные времена. в противном случае я бы пошел на манекен сделать.
Поместите петли в подпрограмму и вызовите return
goto
. Конечно, если код можно использовать повторно, он все равно должен быть в функции.
Я экспериментировал с типизацией "exit for" несколько раз и заметил, что это сработало, и VB не кричал на меня. Это вариант, который я предполагаю, но он просто выглядел плохо.
Я думаю, что лучший вариант похож на тот, который разделяет Tobias. Просто поместите свой код в функцию и верните его, когда вы хотите вырваться из ваших циклов. Выглядит также чище.
For Each item In itemlist
For Each item1 In itemlist1
If item1 = item Then
Return item1
End If
Next
Next
Сделайте внешний цикл циклом while и "Exit While" в инструкции if.
goto
с большим количеством инструкций, большей многословностью и большим отступом. В чем смысл?
For i As Integer = 0 To 100
bool = False
For j As Integer = 0 To 100
If check condition Then
'if condition match
bool = True
Exit For 'Continue For
End If
Next
If bool = True Then Continue For
Next
Попробуйте использовать "Выход для".
Это работает для меня.
;-)
Exit For item
, похожий наNext item
. В «старые добрые времена» вы могли явноNext
на следующий внешний цикл. Сегодня VB выдает ошибку. Конечно, вместо этого более «конструктивно»Exit For
.