Programming: C#
Учебник по C# 3.5 Управляющие конструкции
Источник:
Управляющие конструкции - это то средство, которое позволяет вам создавать
алгоритмы. Стандартными управляющими конструкциями являются if, for, while goto.
К тому же в C# есть много дополнительных конструкций: switch, do и foreach.
if..else
Блок if..else, как очевидствует из названия, позволяет выполнять код при
выполнении определенного условия. if (a > b)
{
Console.WriteLine("a > b");
}
else
{
Console.WriteLine("a <= b");
}
Логическое выражение в скобках должно иметь тип bool (в отличие от C/C++, где
выражение было целым). Если оно истинно, выполнится первый блок команд, если
ложно - второй. При этом если какой-либо блок команд состоит лишь из одной
команды, обрамляющие фигурные скобки можно опустить: if (serverObject != null)
serverObject.Initialize();
Покажем несколько примеров: // Идет проверка, чтобы избежать деления на 0
if (x != 0)
{
d /= x;
}
else
return;
// Проверяем, вернула ли процедура значение и, если нет, возвращаем null
if (command.Parameters["RETURN_VALUE"].Value != Convert.DBNull)
return command.Parameters["RETURN_VALUE"].Value;
else
return null;
Цикл for
Цикл for представляет цикл с инициализирующей командой, условием окончания и
командой перехода. ArrayList items = new ArrayList(); // Инициализируем список
// некоторым образом
CreateArray(items); // Выводим все его элементы по очереди
for (int i = 0; i < items.Count; i++)
{
Console.WriteLine("i[{0}] = {1}", i, items[i]);
}
Логика выполнения цикла следующая: сначала выполняется инициализирующая
команда, далее идет шаг цикла: проверяется условие окончания, если оно ложно, то
цикл прекращается и управление переходит на следующую за циклом команду, иначе
выполняется тело цикла, а после него - команда перехода.
В простейшем случае цикл for оформлен следующим образом:
// Складываем все элементы массива for (int i = 0;
i < 10; i++) sum += array[i];
Такая форма цикла используется если вам нужно проитерироваться с целым
параметром, указывающим номер итерации или если просто нужно выполнить действие
некоторое количество (в нашем примере 10) раз.
while
Цикл while является циклом с предусловием: сначала проверяется определенное
условие перехода, а затем выполняется итерация цикла. Синтаксис цикла while в
общем случае следующий: // Задаем число
int num = 678;
// Число разрядов - 0
int len = 0;
// считаем сколько разрядов в числе
while (num > 0)
{
len++;
num /= 10;
}
Console.WriteLine(len);
Семантика очень проста: проверяем условие перехода. Если оно истинно, то
переходим к телу цикла и затем снова к проверке условия, иначе - прекращаем
выполнение цикла.
В качестве дополнительного примера опять сошлемся на ADO.NET - чтение данных
посредством SqlReader: // Есть ли еще данные в result set? Если есть, читаем их
while (reader.Read())
{
// Обрабатываем данные
users.Add(new User((int)reader["ID"]);
}
Если тело цикла не совсем понятно - ничего страшного. Просто такая структура
действительно часто используется (по крайней мере мной).
goto
goto - это просто оператор безусловного перехода. Он применяется в двух
ситуациях: когда нужно перейти на обработку определенного случая в блоке switch
(он будет рассмотрен позднее) или выполнить переход в определенное место
программы. Во втором случае нужно указать метку в этом месте. Метка указывается
просто - в нужном месте программы пишется имя метки с двоеточием на конце: Exit: return 0;
Чтобы перейти на эту метку, используется следующий синтаксис оператора goto:
goto Exit;
Еще goto применяется если нужно перейти к определенной ветви в блоке switch:
int level = GetLevel();
switch (level)
{
case 0:
Console.WriteLine("Level is less than 1");
break;
case 1:
goto case 2;
case 2:
Console.WriteLine("level is greater than or equal to 1");
goto default;
default:
Console.WriteLine("bye");
break;
}
switch
Оператор switch является расширенным оператором ветвления, который позволяет
в зависимости от значения выражения перейти к выполнению определенного кода. По
сути он эквивалентен набору блоков if, но гораздо более оптимален, так как в нем
для вычисления адреса перехода используется хеш.
Наиболее распространенным синтаксисом switch является следующий: int a = 1;
switch (a)
{
case 0:
//Операторы, выполняющиеся если a = 0
Console.WriteLine("A = 0");
break;
case 1:
//Операторы, выполняющиеся если a = 1
Console.WriteLine("A = 1");
break;
default:
//Операторы, выполняющиеся, если ни один
//из явных случаев не подошел
Console.WriteLine("A <> 0 и A <> 1");
break;
}
Блок case x выполняется, если выражение, указанное в скобках после switch
равно x. Блок default - если ни одно из case-выражений не выполнилось. Удобно
switch использовать для обработки выражений перечислимых типов.
Для переходов между блоками можно использовать команды goto case и goto
default. Для подробной информации смотрите описание оператора goto.
do
Оператор do реализует цикл с постусловием. Суть этого цикла аналогична while,
но условие выхода проверяется не до итерации, а после. Это иногда бывает
удобным. string s = "A, B, C, D";
do
{
s = s.Substring(s.IndexOf(",") + 1);
} while (s.Length > 0);
Обычно его используют, когда проверку нужно выполнить после того, как прошла
хотя бы одна итерация.
foreach
foreach - это очень удобный оператор, значительно облегчающий работу с
коллекциями в C#. Он позволяет перебрать все элементы некоторой коллекции, даже
написанной вами, для этого класс коллекции должен лишь реализовать интерфейс
IEnumerable.
Наиболее общей формой использования foreach является следующая: // Получаем некоторый DataSet
DataSet data = GetData();
foreach (Row row in data.Tables[0].Rows)
{
Console.WriteLine("ID = {0}", row["ID"]);
}
Оператор перебирает все элементы коллекции и выполняет для каждого тело
перечислителя.
Назад | Вперёд
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|