1. ホーム
  2. vb.net

[解決済み] vb.netのネストされたforのブレーク/エグジット

2022-08-09 04:17:36

質問

vb.netでネストしたforやloopから抜け出すにはどうしたらよいですか?

exit forを使ってみましたが、1つの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 を使用することは、構造化された制御ステートメントから前方にジャンプするためだけで、特に代替案がより複雑なコードである場合は、通常、問題ないと考えられています。

    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