Поиск…


Для ... Далее

For ... Next цикл используется для повторения одного и того же действия в течение конечного числа раз. Операторы внутри следующего цикла будут выполняться 11 раз. В первый раз у i будет значение 0, во второй раз оно будет иметь значение 1, в последний раз оно будет иметь значение 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 в консоль. (-1 - это потому, что первая строка подсчитанных строк будет равна 1, а не 0)

Также возможно определить, как должна изменяться управляющая переменная.

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...Next чтобы перебирать любой тип IEnumerable . Сюда входят массивы, списки и все, что может быть типа IEnumerable или возвращает IEnumerable.

Пример цикла с использованием свойства Rows DataTable будет выглядеть так:

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 начинается с оценки состояния. Если это правда, выполняется тело цикла. После того, как тело цикла выполнено, условие 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 для повторения блока операторов 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 .

Выход

Вы можете остановить любой цикл, выйдя рано. Для этого вы можете использовать ключевое слово Exit вместе с именем цикла.

петля Заявление о выходе
За Exit For
Для каждого 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
Для каждого 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 .

Вы можете объявить новую логическую переменную, инициализируя ее одним значением и условно устанавливая ее на другое значение внутри цикла; вы затем используете условную инструкцию (например, 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

Одно из возражений против этого метода заключается в том, что оно может быть неэффективным. Например, если в приведенном выше примере 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)

Этот метод иногда может быть самым простым способом выскочить из цикла и избежать одного или нескольких операторов, которые выполняются сразу после естественного конца цикла.

Вы должны рассмотреть все альтернативы и использовать то, что лучше всего соответствует вашим требованиям, учитывая такие факторы, как эффективность, скорость написания кода и читаемость (таким образом, ремонтопригодность).

Не откладывайте использование 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