Підрозділ 2.13
Цикли
Описує цикли for, while, do while, foreach, вкладені цикли, а також оператори break і continue.
2.13. Цикли
Часто в програмі потрібно виконати одну й ту саму дію багато разів: перебрати всіх пацієнтів у списку, підрахувати суму показників, знайти максимальне значення серед вимірювань. Для цього в C# існують цикли — конструкції, що повторюють блок коду доти, поки виконується певна умова.
У C# є чотири основні типи циклів:
for— коли кількість ітерацій відома або можна її обчислитиwhile— коли умова перевіряється до виконання тілаdo...while— коли тіло повинно виконатись хоча б один разforeach— для перебору колекцій (масивів, списків тощо)

Цикл for
Цикл for — найуніверсальніший для випадків, коли кількість ітерацій відома заздалегідь. Оголошення складається із трьох частин, розділених крапкою з комою:
for (ініціалізація; умова; крок)
{
// тіло циклу
}- Ініціалізація — виконується один раз перед першою ітерацією (зазвичай оголошення лічильника).
- Умова — перевіряється до кожної ітерації; якщо
false— цикл завершується. - Крок — виконується після кожної ітерації (зазвичай збільшення або зменшення лічильника).
Розберемо крок за кроком: int i = 0 — оголошуємо лічильник i з нуля. i < patientNames.Length — цикл триває, поки i не досягне довжини масиву (тобто 5). i++ — після кожної ітерації лічильник збільшується на 1. Таким чином виконується рівно 5 ітерацій: i = 0, 1, 2, 3, 4.
Кількість ітерацій не обов'язково збільшується. Цикл може йти й у зворотному напрямку:
У циклі for можна оголошувати кілька змінних та вказувати кілька виразів у кроці:
Якщо всі три частини оголошення пропустити, отримаємо нескінченний цикл — він виконується доти, поки не буде примусово зупинений оператором break:
for (;;)
{
// нескінченно
}Цикл while
Цикл while перевіряє умову перед виконанням тіла. Якщо умова від самого початку хибна — тіло не виконається жодного разу:
while (умова)
{
// тіло циклу
}Цикл do...while
Цикл do...while виконує тіло до перевірки умови. Це гарантує щонайменше одне виконання тіла, навіть якщо умова від початку хибна:
do
{
// тіло виконується до перевірки умови
}
while (умова);Зверніть увагу на крапку з комою після while (умова) — вона обов'язкова саме в do...while. Відмінність від while: якщо початкове значення dose вже дорівнювало б 200, цикл while не виконався б жодного разу, а do...while виконається один раз (запише 250 і перевірить умову).
Цикл foreach
Цикл foreach призначений для послідовного перебору колекцій: масивів, списків та будь-яких об'єктів, які підтримують перебір. Змінна циклу отримує значення кожного елемента по черзі:
foreach (тип змінна in колекція)
{
// змінна містить поточний елемент
}Тип змінної циклу повинен відповідати типу елементів колекції. Замість явного типу можна використовувати var — компілятор визначить тип самостійно:
Важливо: у foreach заборонено змінювати елементи колекції через змінну циклу. Для зміни елементів використовуйте for з індексом.
Оператор break
Оператор break негайно завершує цикл і передає керування першій інструкції після нього, незалежно від стану умови:
Оператор continue
Оператор continue пропускає решту поточної ітерації і переходить до наступної. Цикл при цьому не завершується:
Вкладені цикли
Один цикл може бути розміщений всередині іншого — так утворюються вкладені цикли. При цьому зовнішній цикл виконується N разів, і на кожній ітерації зовнішнього повністю відпрацьовує внутрішній. Загальна кількість ітерацій — добуток кількостей ітерацій усіх рівнів.
Вкладені цикли є основою алгоритмів обробки двовимірних масивів (матриць, таблиць), що детальніше розглядається у розділі 2.14.
Вибір типу циклу
for— кількість ітерацій відома, потрібен лічильник або потрібно проходити у зворотному напрямку.while— умова відома, але кількість ітерацій — ні; тіло може не виконатись.do...while— тіло повинно виконатись принаймні один раз (введення даних, меню).foreach— перебір усіх елементів колекції від початку до кінця без зміни елементів.