VB.NET-For Each Loopの次の項目に移動する方法


93

のようなステートメントがありExit Forますが、ループを終了する代わりに次のアイテムに移動するだけです。

例えば:

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    End If

    ' Do something

Next

ElseIfステートメントにを追加するだけで、次のようになります。

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    Else
        ' Do something
    End If

Next

Itemsリストの次の項目にジャンプする方法があるかどうか疑問に思っています。ほとんどの場合、なぜこのElseステートメントを使用するだけでなく、適切に質問することになると思いますが、私にとって「何かを行う」コードをラップすることは読みにくいようです。特に多くのコードがある場合。

回答:


178
For Each I As Item In Items
    If I = x Then Continue For

    ' Do something
Next

ありがとう、これはまさに私が探していたもので、面白いのはMSDNのドキュメントにないのですか?(msdn.microsoft.com/en-us/library/5ebk1751.aspx)また、Jonを20秒で倒して投稿をお祝いします!:)
ショーンテイラー

9
もうすぐスキートになりそうです!;)
アダムロビンソン

Ifステートメントを適切に閉じた方がいいです。それは誤解を招くものです。
mchar

48

Continue代わりに次のステートメントを使用します。

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

これは、イテレータ自体をオンに移動する場合とは少し異なります- Ifが再び実行される前に何か。通常、これが必要ですが、そうでない場合は、ループを使用するのではなくGetEnumerator()MoveNext()/をCurrent明示的に使用する必要がありFor Eachます。


4

何について:

If Not I = x Then

  ' Do something '

End If

' Move to next item '

1

次のコードは良い習慣ではないことを明確にしたいと思います。GOTOラベルを使用できます。

For Each I As Item In Items

    If I = x Then
       'Move to next item
        GOTO Label1
    End If

    ' Do something
    Label1:
Next

23
できますが、しないでください。
MiseryIndex 2009年

ジャンプのせいで悪いです。
Syed Tayyab Ali、

4
それが良い習慣ではなく、言語がサポートする明らかにより良い解決策がある場合(Continue For / Resume Next)、この回答は自発的に削除する必要があります。
eniacAvenger 2015年

Stackoverflowは、利用可能なオプションの範囲を調査する目的で複数の回答を可能にします。これは悪いオプションだと思うが、それはオプションだ。だから私は完全性のために含まれる価値があると思います。
ジェフ

0

試しContinue Forてみたところ、失敗してコンパイラエラーが発生しました。これをしている間に、私は「再開」を発見しました:

For Each I As Item In Items

    If I = x Then
       'Move to next item
       Resume Next
    End If

    'Do something

Next

注:ここではVBAを使用しています。


2
このコードはVBAでは機能しません。Resume Next非構造化エラー処理用です。
Daniel

continueステートメントがないため、ループの最後全体をVBAでラップするには、大きなIFステートメントを使用する必要があります。だからIf I <> x Then
HackSlash

0

「続行」のみが許容される標準です(残りは「スパゲッティコード」につながります)。

少なくとも "continue for"を使用すると、プログラマーはコードがループの先頭に直接移動することを知っています。

純粋主義者にとっては、純粋な「非スパゲッティ」コードなので、このようなものが最適です。

Dim bKeepGoing as Boolean 
For Each I As Item In Items
  bKeepGoing = True
  If I = x Then
    bKeepGoing = False
  End If
  if bKeepGoing then
    ' Do something
  endif
Next

ただし、コーディングを簡単にするために、「続行」は問題ありません。(ただし、コメントするのは良い考えです)。

「続行」の使用

For Each I As Item In Items
  If I = x Then
    Continue For   'skip back directly to top of loop
  End If
  ' Do something
Next
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.