This article has been localized into Russian by the community.
Циклы
Еще один важный прием при написании программ-цикличность - возможность повторить блок кода X раз. В C# они бывают в 4-х различных вариантов, и мы рассмотрим каждый из них.
Цикл while
Цикл while, вероятно, самый простой, поэтому мы начнем с этого. Цикл while просто выполняет блок кода до тех пор, пока заданное условие истинно. Небольшой пример, а затем еще несколько объяснений:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int number = 0;
while(number < 5)
{
Console.WriteLine(number);
number = number + 1;
}
Console.ReadLine();
}
}
}
Попробуйте запустить код. Вы получите хороший список чисел, от 0 до 4. Сначала число определяется как 0, и каждый раз при выполнении кода в цикле оно увеличивается на единицу. Но почему только 4, Если код говорит 5? Чтобы условие возвращало true, число должно быть меньше 5, что в данном случае означает, что код, который выводит число, не будет достигнут, как только число будет равно 5. Это потому что условие цикла while вычисляется перед подачей в блок кода.
Цикл do
Обратное верно для цикла do, который работает как цикл while в других аспектах. Цикл do оценивает условие после выполнения цикла, который гарантирует, что блок кода всегда выполняется хотя бы один раз.
int number = 0;
do
{
Console.WriteLine(number);
number = number + 1;
} while(number < 5);
Выход тот же, но только число больше 5, цикл завершается.
Цикл for
Цикл немного другой. Он предпочтителен, когда вы знаете, сколько итераций вы хотите, либо потому, что вы знаете точное количество повторений, или потому, что у вас есть переменная, содержащая сумму. Вот пример цикла for.
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int number = 5;
for(int i = 0; i < number; i++)
Console.WriteLine(i);
Console.ReadLine();
}
}
}
Это дает точно такой же выход, но, как вы можете видеть, цикл for немного компактнее. Он состоит из 3-х частей - мы инициализируем переменную для щетчика, настраиваем условный оператор для его проверки и увеличиваем счетчик (++ означает то же, что и "variable = variable + 1").
Первая часть, где мы определяем переменную i и устанавливаем ее в 0, выполняется только один раз, перед началом цикла. Последние 2 части выполняются для каждом повторении цикла. Каждый раз i сравнивается с нашей переменной number - если i меньше number, цикл выполняется еще один раз. После этого i увеличивают на единицу.
Попробуйте запустить программу, а затем, попробуйте изменить числовую переменную на что-то большее или меньшее, чем 5. Вы увидите, что цикл реагирует на изменение.
Цикл foreach
Последний цикл, который мы рассмотрим, - это цикл foreach. Он работает с коллекциями элементов, например массивами или другими встроенными типами списков. В нашем примере мы будем использовать один из простых списков, называемый ArrayList. Он работает так же, как массив, но мы рассмотрим его в следующей главе.
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("John Doe");
list.Add("Jane Doe");
list.Add("Someone Else");
foreach(string name in list)
Console.WriteLine(name);
Console.ReadLine();
}
}
}
Итак, мы создаем экземпляр ArrayList, а затем добавляем к нему строковые элементы. Мы используем цикл foreach для выполнения каждого элемента, устанавливая переменную name для элемента, который мы достаем каждый раз. Таким образом, у нас есть именованная переменная для вывода. Как вы можете видеть, мы объявляем переменную name строкового типа, вам всегда нужно сообщать циклу foreach, какой тип данных вы ожидаете извлечь из коллекции. В случае, если у вас есть список различных типов, вы можете использовать объект класса, а не конкретного класса, чтобы извлечь каждый элемент как объект.
При работе с коллекциями, вы, скорее всего, будете чаще всего использовать цикл foreach, главным образом потому, что он проще, чем любой из других циклов для такого рода операций.