Взлом / выход, вложенный в vb.net - PullRequest
115 голосов
/ 15 марта 2011

Как мне выйти из вложенного цикла или в vb.net?

Я пытался использовать выход для, но он прыгнул или сломался только один только для цикла.

Как я могу сделать это для следующего:

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

Ответы [ 6 ]

188 голосов
/ 15 марта 2011

К сожалению, нет оператора 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
    
16 голосов
/ 15 марта 2011

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

3 голосов
/ 01 мая 2017
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
3 голосов
/ 06 февраля 2013

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

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

For Each item In itemlist
    For Each item1 In itemlist1
        If item1 = item Then
            Return item1
        End If
    Next
Next
3 голосов
/ 29 мая 2012

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

0 голосов
/ 10 апреля 2019

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

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

Папп.

...