Книга: C# для профессионалов. Том II
Цикл for
Цикл for
Давайте теперь рассмотрим странный синтаксис цикла for
. Этот цикл является эквивалентом C# для следующего кода VB:
Integer I
For I = 1 То 3
listBox1.Items.Add "Details of the Employee"
Next
Идея цикла For
в VB состоит в том, что он начинается с инициализации некоторой переменной — управляющей переменной цикла, и каждый раз при проходе цикла что-то добавляется к управляющей переменной, пока она не превысит конечное значение. Это достаточно полезно, но не дает почти никакой гибкости в работе цикла. Хотя можно изменять значение приращения или даже сделать его отрицательным, используя возможности Step
, цикл всегда работает с помощью вычислений, и проверка на выход из цикла всегда происходит по достижении переменной некоторого минимального или максимального значения.
В C# цикл for
обобщает эту концепцию. Базовая идея цикла for
в C# следующая. В начале цикла что-то делается, на каждом шаге цикла тоже что-то делается, чтобы перейти к следующей итерации, затем, чтобы определить, когда выходить из цикла, выполняется некоторая проверка. Сравнение версий Visual Basic и C# выглядит следующим образом:
VB | C# | |
---|---|---|
В начале цикла | Инициализация управляющей переменной цикла | Выполнить что-то |
Проверка на выход из цикла | Не превысила ли переменная цикла некоторого значения? | Проверка некоторого условия |
В конце каждой итерации | Увеличить управляющую переменную цикла | Выполнить что-то |
Это может выглядеть как-то неопределенно, но зато дает большую гибкость. Например, в C# вместо добавления некоторой величины к управляющей переменной цикла на каждой итерации можно добавлять какое-то число, которое считывается из файла и которое изменяется на каждой итерации. Проверка не должна быть проверкой значения управляющей переменной цикла, это может быть проверка, например, достижения конца файла. Это позволяет при подходящем выборе начального действия, проверки и действия в конце каждой итерации циклу for
эффективно выполнять те же задачи, что и любому из циклов VB — For
, Foreach
, Do
и While
, или цикл может вообще работать неким экзотическим образом, для которого нет простого эквивалента в VB. Цикл for
в C# действительно представляет полную свободу управления циклом в том виде, какой будет необходим для рассматриваемой задачи.
Надо отметить, что C# поддерживает также циклы foreach
, do
и while
для соответствующих ситуаций.
Давайте вернемся к точному синтаксису. Вспомним, что версия C# для приведенного выше цикла for
выглядит следующим образом:
for (int I = 0; I < 3; I++) {
this.listBox1.Items.Add(Employees[I].Name);
this.listBox1.Items.Add(Employees[I].ToString());
this.listBox1.Items.Add("");
}
Как можно видеть, инструкция for
получает три различные элемента внутри скобок. Эти элементы разделяются точкой с запятой:
? Первый элемент является действием, которое выполняется прямо в начале цикла, чтобы инициализировать цикл. В данном случае объявляется и инициализируется управляющая переменная цикла.
? Следующим элементом является условие, определяющее завершение цикла. В данном случае условие состоит в том, что I должно быть меньше 3. Цикл продолжается, пока это условие будет true
, и закончится, как только условие станет false
. Условие оценивается в начале каждой итерации, чтобы, если оно окажется false
в самом начале, инструкция внутри цикла вообще не выполнялась.
? В третьем элементе находится инструкция, которая выполняется в конце каждой итерации цикла. Циклы Visual Basic всегда работают, увеличивая некоторое число, и это как раз то, что делается в данном случае.
Синтаксис выглядит незнакомым, но после привыкания к нему, можно использовать цикл for
очень эффективно. Например, предположим, что необходимо вывести все целые степени 2, которые меньше 4000, в окне списка. Запишем следующий код:
for (int I = 2; I < 4000; I *= 2)
listBox1.Items.Add(I.ToString());
Такой результат можно получить и в VB, но немного труднее. Для этого конкретного цикла в VB лучше воспользоваться циклом while
.
- Оператор цикла foreach
- Директива parallel for
- xinetd Configuration for wu-ftpd
- Пример 12-39. Использование seq для генерации списка аргументов цикла for
- Оператор цикла for
- 10.5.1 Preparing for RTOS
- Досрочный выход из циклов
- Метод Пиза для for-цикла
- Цикл for…in
- Цикл For…Next
- Цикл For Each…Next
- Оператор пошагового цикла for