サーチ…


For ...次へ

For ... Nextループは、同じアクションを有限回数繰り返すために使用されます。次のループ内のステートメントは11回実行されます。初めて、 iは値0を持っています、それは値1を持つ2回目、それは値10を持つ最後の時間です。

For i As Integer = 0 To 10
    'Execute the action
    Console.Writeline(i.ToString)
Next

整数式を使用してループをパラメータ化できます。制御変数(この場合i )は、 Next後にも記述することができますが、必須ではありません。制御変数は、 Forステートメントではなく、事前に宣言することができます。

Dim StartIndex As Integer = 3
Dim EndIndex As Integer = 7
Dim i As Integer

For i = StartIndex To EndIndex - 1
    'Execute the action
    Console.Writeline(i.ToString)
Next i

開始および終了整数を定義できることにより、次のような他のオブジェクトを直接参照するループが作成されます。

For i = 0 to DataGridView1.Rows.Count - 1
    Console.Writeline(DataGridView1.Rows(i).Cells(0).Value.ToString)
Next

これにより、 DataGridView1すべての行がループされ、列1の値をコンソールに書き込む操作が実行されDataGridView1(-1は、カウントされた行の最初の行が0ではなく1になるためです)

制御変数がどのように増加しなければならないかを定義することも可能です。

For i As Integer = 1 To 10 Step 2
    Console.Writeline(i.ToString)
Next 

これは、

1 3 5 7 9

制御変数を減らす(カウントダウンする)ことも可能です。

For i As Integer = 10 To 1 Step -1
    Console.Writeline(i.ToString)
Next

これは、

10 9 8 7 6 5 4 3 2 1

ループ外で制御変数を使用(読み取りまたは更新)しないでください。

For Each ...アイテムのコレクションをループする次のループ

For Each...Nextループを使用すると、任意のIEnumerable型を反復処理できます。これには、配列、リストなど、IEnumerable型であるかIEnumerableを返すものが含まれます。

DataTableのRowsプロパティをループする例は、次のようになります。

For Each row As DataRow In DataTable1.Rows
    'Each time this loops, row will be the next item out of Rows
    'Here we print the first column's value from the row variable.
    Debug.Print(Row.Item(0))
Next 

注目すべき重要な点は、 For Eachループ中にコレクションを変更してはならないことです。これを行うと、メッセージと共にSystem.InvalidOperationExceptionが発生します。

コレクションが変更されました。列挙操作が実行されないことがあります。

条件が真である間に反復するループ

Whileループは、条件を評価することによって開始されます。 trueの場合、ループの本体が実行されます。ループの本体が実行された後、 While条件が再度評価されて、本体を再実行するかどうかが決定されます。

Dim iteration As Integer = 1
While iteration <= 10
  Console.Writeline(iteration.ToString() & " ")

  iteration += 1
End While

これは、

1 2 3 4 5 6 7 8 9 10

警告: Whileループは無限ループにつながりますiterationをインクリメントするコード行が削除されたらどうなるか考えてみてください。そのような場合、条件は決して真ではなく、ループは無期限に継続する。

Do ... Loop

Do...Loopを使用Do...Loopステートメントのブロックを繰り返すWhileまたは条件が真になるUntil 、ループの始めまたは終わりのいずれかで条件をチェックします。

Dim x As Integer = 0
Do
    Console.Write(x & " ")
    x += 1
Loop While x < 10

または

Dim x As Integer = 0
Do While x < 10
    Console.Write(x & " ")
    x += 1
Loop

0 1 2 3 4 5 6 7 8 9

Dim x As Integer = 0
Do
    Console.Write(x & " ")
    x += 1
Loop Until x = 10

または

Dim x As Integer = 0
Do Until x = 10
    Console.Write(x & " ")
    x += 1
Loop

0 1 2 3 4 5 6 7 8 9

Continue Doを使用すると、ループの次の繰り返しにスキップできます。

Dim x As Integer = 0
Do While x < 10
    x += 1
    If x Mod 2 = 0 Then
        Continue Do
    End If
    Console.Write(x & " ")
Loop

1 3 5 7 9

Exit Doループを終了できます - この例では、条件がないと無限ループが発生します。

Dim x As Integer = 0
Do
    Console.Write(x & " ")
    x += 1
    If x = 10 Then
        Exit Do
    End If
Loop

0 1 2 3 4 5 6 7 8 9

短絡

ExitまたはContinueステートメントを使用すると、ループが終了したり、いつでもどこでも早期にContinueます。

終了

早期に終了することでループを停止することができます。これを行うには、キーワードExitループの名前とともに使用します。

ループ出口ステートメント
にとって Exit For
For Each Exit For
一方を行います Exit Do
Exit While

ループを早期に終了することは、アプリケーションのニーズを満たすために必要な回数だけループすることで、パフォーマンスを向上させる素晴らしい方法です。以下は、番号2が見つかるとループが終了する例です。

Dim Numbers As Integer() = {1,2,3,4,5}
Dim SoughtValue As Integer = 2
Dim SoughtIndex
For Each i In Numbers
    If i = 2 Then 
        SoughtIndex = i
        Exit For
    End If
Next
Debug.Print(SoughtIndex)

続ける

早期に終了するだけでなく、次のループの繰り返しに進む必要があると判断することもできます。これは、 Continueステートメントを使用して簡単に実行できます。 Exitと同様に、ループ名で処理されます。

ループ継続声明
にとって Continue For
For Each Continue For
一方を行います Continue Do
Continue While

ここでは、合計に偶数が追加されないようにする例を示します。

Dim Numbers As Integer() = {1,2,3,4,5}
Dim SumOdd As Integer = 0
For Each i In Numbers
    If Numbers(i) \ 2 = 0 Then Continue For
    SumOdd += Numbers(i)
Next

使用上のアドバイス

ExitまたはContinueを使用する代わりに、2つの方法を使用できます。

新しいブール変数を宣言し、1つの値に初期化し、条件付きでループ内の他の値に設定することができます。その変数に基づいて条件文( If )を使用して、後続の反復でループ内の文の実行を回避します。

Dim Found As Boolean = False
Dim FoundIndex As Integer
For i As Integer = 0 To N - 1
    If Not Found AndAlso A(i) = SoughtValue Then
        FoundIndex = i
        Found = True
    End If
Next

この手法に対する異論の1つは、非効率的である可能性があることです。たとえば、上記の例でNが1000000で、配列A最初の要素がSoughtValueに等しい場合、ループは何も役立たずにさらに999999回繰り返されます。しかしながら、この技術は、場合によってはより明瞭であるという利点を有することができる。

GoToステートメントを使用して、ループから飛び出すことができます。 GoToを使用てループにジャンプすることはできません。

    Dim FoundIndex As Integer
    For i As Integer = 0 To N - 1
        If A(i) = SoughtValue Then
            FoundIndex = i
            GoTo Found
        End If
    Next
    Debug.Print("Not found")
Found:
    Debug.Print(FoundIndex)

このテクニックは、ループから飛び出して、ループの自然な終わりの直後に実行される1つ以上のステートメントを避ける最もきれいな方法です。

効率性、コードの記述速度、可読性(したがって保守性)などを考慮して、すべての代替案を検討し、要件に最も適したものを使用する必要があります。

最善の選択肢である場合には、それらの機会にGoToを使用しないでください。

ネストループ

A nested loop is a loop within a loop, an inner loop within the body of an outer one. How this works is that the first pass of the outer loop triggers the inner loop, which executes to completion. Then the second pass of the outer loop triggers the inner loop again. This repeats until the outer loop finishes. a break within either the inner or outer loop would interrupt this process.

次のネストされたループの構造は次のとおりです。

For counter1=startNumber to endNumber (Step increment)

    For counter2=startNumber to endNumber (Step increment)

        One or more VB statements

    Next counter2

Next  counter1

例:

    For  firstCounter = 1 to 5

      Print “First Loop of ” + firstCounter

    For   secondCounter= 1 to 4

      Print “Second Loop of ” + secondCounter

    Next secondCounter

  Next firstCounter


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow