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
 

Hosted by uCoz