В любом языке программирования имеются итерационные конструкции (управляющие конструкции), использующиеся для повторения блоков кода до тех пор, пока не будет выполнено какое-то условие завершения. В языке C# поддерживаются четыре таких конструкции: for, foreach, while и do/while. Приступим к их изучению.
Цикл for
Данный цикл хорошо подойдёт, если нужно выполнить какой-то блок кода фиксированное количество раз. Оператор for позволяет указать, сколько раз должен повторяться блок кода и задать условие завершения цикла. Синтаксис оператора:
for ([инициализация счетчика]; [условие]; [изменение счетчика])
{
// действия
}
Рассмотрим небольшой пример:
for (int i = 0; i < 9; i++)
{
Console.Write("{0}", i);
}
Console.ReadKey();
// Будет выведена строка: 012345678.
Первая часть объявления цикла - int i = 0 - создает и инициализирует счетчик i. Счетчик необязательно должен представлять тип int. Это может быть и другой числовой тип. И перед выполнением цикла его значение будет равно 0. В данном случае это то же самое, что и объявление переменной.
Вторая часть - условие, при котором будет выполняться цикл. Пока условное выражение возвращает true, будет выполняться цикл. В данном случае цикл будет выполняться, пока счетчик i не достигнет 9. И третья часть - приращение счетчика на единицу. Также счётчик можно и уменьшить (i--).
Вторая часть - условие, при котором будет выполняться цикл. Пока условное выражение возвращает true, будет выполняться цикл. В данном случае цикл будет выполняться, пока счетчик i не достигнет 9. И третья часть - приращение счетчика на единицу. Также счётчик можно и уменьшить (i--).
Цикл foreach
Цикл foreach удобно использовать при проходе по всем элементам массива или коллекции без проверки верхнего предела. Рассмотрим пример прохода по массиву целых чисел с использованием цикла foreach:
int[] digits = { 1, 2, 3, 4};
foreach (int i in digits)
Console.WriteLine(i);
Сначала в foreach указывается переменная, которая должна быть такого же типа, что и элементы массива. В эту переменную будет получен элемент массива для его дальнейшей обработки (в данном случае обработка заключается в выводе на консоль). После ключевого слова in задается название переменной массива.
Цикл while
Цикл while (цикл с предусловием) проверяет истинность некоторого условия, и если условие истинно, то код цикла выполняется. Синтаксис:
while (логическое выражение)
оператор;
Сначала цикл вычисляет значение логического выражения. Если оно истинно, происходит итерация цикла (выполняется тело цикла), иначе происходит выход из цикла и выполнение следующего за циклом оператора. Рассмотрим пример:
int i=0;
while(i++ < 10) Console.Write("{0}", i);
Console.ReadKey();
// Будет выведена строка: 12345678910
Цикл do/while
В отличии от цикла while в форме цикла do/while сначала выполняются операторы (тело цикла), а затем уже проверяется условие. Если условие истинно, то начинается следующая итерация. Тело цикла будет выполнено как минимум один раз. Синтаксис цикла:
do
{
// тело цикла
}
while (условие);
Рассмотрим предыдущий пример:
int i = 1;
do
Console.Write(i);
while (i++ < 10);
Console.ReadKey();
// Будет выведена строка: 12345678910
Операторы continue и break
Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае можно воспользоваться оператором break. Например:
for (int i = 0; i < 10; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
Console.ReadKey();
В условии цикла сказано, что цикл будет выполняться, пока счетчик i не достигнет значения 10, в реальности цикл сработает 5 раз. Так как при достижении счетчиком i значения 5, сработает оператор break, и цикл завершится.
Если нужно, чтобы при проверке цикл не завершался, а просто пропускал текущую итерацию, тогда можно воспользоваться оператором continue:
Если нужно, чтобы при проверке цикл не завершался, а просто пропускал текущую итерацию, тогда можно воспользоваться оператором continue:
for (int i = 0; i < 10; i++)
{
if (i == 5)
continue;
Console.WriteLine(i);
}
Console.ReadKey();
В этом случае цикл, когда дойдет до числа 5, которое не удовлетворяет условию проверки, просто пропустит это число и перейдет к следующей итерации.