Чтение онлайн

на главную

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

• цикл

do/while
.

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

IterationsAndDecisions
.

На заметку! Материал данного раздела главы будет кратким и по существу, т.к. здесь предполагается наличие у вас опыта работы с аналогичными ключевыми словами (

if
,
for
,
switch
и т.д.) в другом языке программирования. Если нужна дополнительная информация, просмотрите темы "Iteration Statements (C# Reference)" ("Операторы
итераций (справочник по С#)"), "Jump Statements (C# Reference)" ("Операторы перехода (справочник по С#)") и "Selection Statements (C# Reference)" ("Операторы выбора (справочник по С#)") в документации по C# (
https://docs.microsoft.com/ru-ru/dotnet/csharp/
).

Использование цикла for

Когда требуется повторять блок кода фиксированное количество раз, хороший уровень гибкости предлагает оператор

for
. В действительности вы имеете возможность указывать, сколько раз должен повторяться блок кода, а также задавать условие завершения. Не вдаваясь в излишние подробности, ниже представлен пример синтаксиса:

// Базовый цикл for.

static void ForLoopExample

{

// Обратите внимание, что переменная i видима только в контексте цикла for.

for(int i = 0; i < 4; i++)

{

Console.WriteLine("Number is: {0} ", i);

}

// Здесь переменная i больше видимой не будет.

}

Все трюки, которые вы научились делать в языках С, C++ и Java, по-прежнему могут использоваться при формировании операторов

for
в С#. Допускается создавать сложные условия завершения, строить бесконечные циклы и циклы в обратном направлении (посредством операции
– -
), а также применять ключевые слова
goto
,
continue
и
break
.

Использование цикла foreach

Ключевое слово

foreach
языка C# позволяет проходить в цикле по всем элементам внутри контейнера без необходимости в проверке верхнего предела. Тем не менее, в отличие от цикла
for
цикл
foreach
будет выполнять проход по контейнеру только линейным (п+1) образом (т.е. не получится проходить по контейнеру в обратном направлении, пропускать каждый третий элемент и т.п.).

Однако если нужно просто выполнить проход по коллекции элемент за элементом, то цикл

foreach
будет великолепным выбором. Ниже приведены два примера использования цикла
foreach
— один для обхода массива строк и еще один для обхода массива целых чисел. Обратите внимание, что тип, указанный перед ключевым словом
in
, представляет тип данных контейнера.

// Проход по элементам массива посредством foreach.

static void ForEachLoopExample

{

string[] carTypes = {"Ford", "BMW", "Yugo", "Honda" };

foreach (string c in carTypes)

{

Console.WriteLine(c);

}

int[] myInts = { 10, 20, 30, 40 };

foreach (int i in myInts)

{

Console.WriteLine(i);

}

}

За

ключевым словом
in
может быть указан простой массив (как в приведенном примере) или, точнее говоря, любой класс, реализующий интерфейс
IEnumerable
. Как вы увидите в главе 10, библиотеки базовых классов .NET Core поставляются с несколькими коллекциями, которые содержат реализации распространенных абстрактных типов данных. Любой из них (скажем, обобщенный тип
List<T>
) может применяться внутри цикла
foreach
.

Использование неявной типизации в конструкциях foreach

В итерационных конструкциях

foreach
также допускается использование неявной типизации. Как и можно было ожидать, компилятор будет выводить корректный "вид типа". Вспомните пример метода LINQ, представленный ранее в главе. Даже не зная точного типа данных переменной
subset
, с применением неявной типизации все-таки можно выполнять итерацию по результирующему набору. Поместите в начало файла следующий оператор
using
:

using System.Linq;

static void LinqQueryOverInts

{

int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8 };

// Запрос LINQ!

var subset = from i in numbers where i < 10 select i;

Console.Write("Values in subset: ");

foreach (var i in subset)

{

Console.Write("{0} ", i);

}

}

Использование циклов while и do/while

Итерационная конструкция

while
удобна, когда блок операторов должен выполняться до тех пор, пока не будет удовлетворено некоторое условие завершения. Внутри области видимости цикла
while
необходимо позаботиться о том, чтобы это условие действительно удовлетворялось, иначе получится бесконечный цикл. В следующем примере сообщение
"In while loop"
будет постоянно выводиться на консоль, пока пользователь не завершит цикл вводом
yes
в командной строке:

static void WhileLoopExample

{

string userIsDone = "";

// Проверить копию строки в нижнем регистре.

while(userIsDone.ToLower != "yes")

{

Console.WriteLine("In while loop");

Console.Write("Are you done? [yes] [no]: "); // Запрос продолжения

userIsDone = Console.ReadLine;

}

Поделиться:
Популярные книги

Кровь Василиска

Тайниковский
1. Кровь Василиска
Фантастика:
фэнтези
попаданцы
аниме
4.25
рейтинг книги
Кровь Василиска

Венецианский купец

Распопов Дмитрий Викторович
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Венецианский купец

Сопряжение 9

Астахов Евгений Евгеньевич
9. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
технофэнтези
рпг
5.00
рейтинг книги
Сопряжение 9

На три фронта

Бредвик Алекс
3. Иной
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
На три фронта

Авиатор: назад в СССР 11

Дорин Михаил
11. Покоряя небо
Фантастика:
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 11

Санек

Седой Василий
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Санек

Лорд Системы 8

Токсик Саша
8. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 8

Мерзавец

Шагаева Наталья
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Мерзавец

Игра топа. Между двух огней

Вяч Павел
2. Игра топа
Фантастика:
фэнтези
7.57
рейтинг книги
Игра топа. Между двух огней

Провинциал. Книга 2

Лопарев Игорь Викторович
2. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 2

Идущий в тени 6

Амврелий Марк
6. Идущий в тени
Фантастика:
фэнтези
рпг
5.57
рейтинг книги
Идущий в тени 6

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10