[vb.net] vb.net에 중첩 된 중단 / 종료

vb.net의 중첩 된 for 또는 루프에서 벗어나려면 어떻게해야합니까?

나는 exit for를 사용해 보았지만 루프 하나만 점프하거나 깨졌습니다.

다음을 위해 어떻게 만들 수 있습니까?

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

답변

루프를 서브 루틴에 넣고 호출 return


답변

외부 루프를 while 루프로 만들고 if 문에서 “Exit While”을 만듭니다.


답변

나는 몇 번 “exit for”를 입력하는 실험을했고 그것이 효과가 있다는 것을 알아 차렸고 VB는 나에게 소리를 지르지 않았다. 내가 생각하는 옵션이지만 단지 나빠 보였다.

최선의 선택은 Tobias가 공유하는 것과 유사하다고 생각합니다. 코드를 함수에 넣고 루프에서 벗어나고 싶을 때 반환되도록하십시오. 너무 깨끗해 보입니다.

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


답변

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


답변

for-to 루프를 종료하려면 인덱스를 한계 이상으로 설정하기 만하면됩니다.

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

아버지.


답변