Я вижу данную расылку, как аналог премодерируемой
конференции. Т.е. здесь мы,
люди изучающие и использующие платформу .NET, сможем
обменяться своими
находками и идеями.
Присылайте письма с вопросами и ответами на адрес mailto:level3@mail.ru,
они будут помещены в рассылку с указанием имени и
(по желанию) адреса автора,
если содержание соответствует тематике.
На письма с очень часто задаваемыми вопросами я
постараюсь ответить не помещая
их в рассылку, таким образом, надеюсь, что подписка
будет интересной для Вас.
Переменные объявленные в цикле (в том числе в
заголовке цикла for и foreach) не
видны снаружи цикла (так же как в стандартном C++)
while
Пока истинно условие выполняется оператор - тело
цикла.
int a = 3;
while (a < 3)
{
System.Console.WriteLine(a);
a++;
}
do-while
Здесь сначала один раз выполняется тело цикла, затем
проверяется условие. Если
условие истинно, то выполнение тела цикла
повторяется.
int a = 4;
do
{
System.Console.WriteLine(a);
a++;
}
while (a < 3)
for
Этот цикл чаще всего используют когда число
повторений известно заранее.
for (int a = 0; a < 5; a ++)
{
System.Console.WriteLine(a);
}
Есть частная разновидность - бесконечный цикл - for
(;;){...}
В C# рекомендуют бесконечный цикл писать как
while(true){...}
foreach
Этот цикл полезен для перебора всех элементов в
массиве, классах типа ArrayList
и Hashtable (и вообще всех классах, реализующих
IEnumerable)
int[] a = new int[]{1,2,3};
foreach (int b in a)
{
System.Console.WriteLine(b);
}
При этом переменной b присваивается по очереди
каждый элемент массива. Если
переменная b имеет содержит непосредственно значение
(а не ссылку на объект),
то изменять элементы массива через нее не получится.
Если же переменная b -
объект, то через нее можно менять текущий элемент
массива.
Этот оператор может стоять внутри циклов for,
do-while и while, а также внутри
оператора switch. Выполнение оператора break
приводит к выходу из цикла или
оператора switch.
continue
Этот оператор может стоять внутри циклов for,
do-while и while. Выполнение
оператора continue приводит к переходу на проверку
условия цикла
goto
Оператор goto используется для перехода на метку и
внутри оператора switch.
Переходы на метку использовать не рекомендуется.
int a = 0;
start:
System.Console.WriteLine(a);
a++;
if (a < 5)
{
goto start;
}
Оператор выбора используется для выполнения или не
выполнения некоторого
оператора в зависимости от условия. Если условие
истинно, то вложенный оператор
выполняется.
Кроме того, может присутствовать альтернативная
ветвь, которая выполняется в
том случае, если условие ложно.
if (a == 5)
System.Console.WriteLine("A is 5");
else
System.Console.WriteLine("A is not 5");
Здесь выполняется одна из альтернативных ветвей в
зависимости от значения
управляющего выражения
switch (nValue)
{
case 1: case 2: case 3: case 4: case 5:
Console.WriteLine("Rabbit walk through the street" );
break; // this line is necessary
}
switch (someString)
{
default:
break;
case null:
break;
case "leavetakings" : // two cases for code
case "greetings" :
goto default;
case "goodbye" :
goto case "leavetakings";
case "error":
// int i = 5;
// if you uncomment previous line you should get
// "control cannot fall through from one case to another"
error
case "next case":
throw new ApplicationException();
}
Отличительной возможностью C# является возможность
ветвления по строкам и
запрет на переход между блоками без явного на это
указания (при компиляции
выдается ошибка)
Есть возможность сопоставить одному блоку несколько
значений (в примере -
"leavetakings" и "greetings"). Есть возможность
передать управление на другой
блок (goto case x; goto default;).
В случае если делается ветвление по переменной типа
string, значение которой
равно null, а соответствующий case отсутствует,
будет выполняться ветвь default
(если такая есть). null - вполне полноправное
значение переменной типа string и
NullPointerException оператором switch выбрасываться
не будет.
-----Original Message-----
From: Fiery Dragon
Sent: Tuesday, September 18, 2001 12:44 PM
To: level3@mail.ru
Subject:
Добрый день, Сергей!
Очень рад Вашей подписке хотя бы уже потому, что
"родная" документация написана
уж очень тяжелым канцелярским языком. Спасибо за
переложение. :) Мне кажется в
таблице типов допущена некоторая неточность: разве
single и double переменные
не имеют знакового разряда? Как же тогда
представляются отрицательные числа?