Ломать/выходить в vb.net

Как выйти из вложенных или циклических в 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

Ответ 1

К сожалению, нет инструкции 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
    

Ответ 2

Поместите петли в подпрограмму и вызовите return

Ответ 3

Я экспериментировал с типизацией "exit for" несколько раз и заметил, что это сработало, и VB не кричал на меня. Это вариант, который я предполагаю, но он просто выглядел плохо.

Я думаю, что лучший вариант похож на тот, который разделяет Tobias. Просто поместите свой код в функцию и верните его, когда вы хотите вырваться из ваших циклов. Выглядит также чище.

For Each item In itemlist
    For Each item1 In itemlist1
        If item1 = item Then
            Return item1
        End If
    Next
Next

Ответ 4

Сделайте внешний цикл циклом while и "Exit While" в инструкции if.

Ответ 5

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

Ответ 6

Попробуйте использовать "Выход для".

Это работает для меня.

;-)

Ответ 7

Если я хочу выйти из цикла for-to, я просто устанавливаю индекс за пределы:

    For i = 1 To max
        some code
        if this(i) = 25 Then i = max + 1
        some more code...
    Next'

Папп.