Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

while и do…while

Также, как и для

if
, эти инструкции имеют точно такой же синтаксис и назначение в C#, как и в C++, за исключением того, что условное выражение должно оцениваться как
bool
.

int X;

while (X) {/* инструкции */} // неправильно

while (X != 0) {/* инструкции */} // правильно

switch 

Инструкция

switch
служит для тех же целей в C#, что и в C++. Она является, однако, более мощной в C#, так как используется строка в качестве проверяемой переменной, что невозможно в C++:

string MyString; // инициализировать MyString

switch (MyString) {

case "Hello":

 // что-нибудь сделать

 break;

case "Goodbye":

 // и т.д.

Синтаксис в C# слегка отличается тем, что каждое предложение

case
должно явно заканчиваться. Не разрешается одному
case
содержать другой
case
, если только первый
case
не является пустым. Если желательно получить такой результат, используйте инструкцию
goto
.

switch (MyString) {

case "Hello":

 // что-нибудь сделать

 goto case "Goodbye"; // перейдет к выполнению инструкций

// в предложении "Goodbye"

case "Goodbye":

 // сделать что-то еще

 break;

case "Black": // здесь можно провалиться, так как он пустой

case "White":

 // сделать что-то еще

 // выполняется, если MyString содержит

 // либо "Black", либо "White"

 break;

default:

 int j = 3;

 break;

}

Компания Microsoft решила использовать инструкцию

goto
в этом контексте, чтобы предотвратить появление ошибок в случае, если требовалось выполнить пропущенный
break
, и код в инструкции
switch
проваливался в следующее предложение
case
.

foreach

C# предоставляет дополнительную инструкцию управления потоком выполнения

foreach
.
foreach
делает цикл по всем элементам массива или коллекции, не требуя явной спецификации индексов. Цикл
foreach
на массиве может выглядеть следующим образом. В этом примере предполагается, что
MyArray
является массивом
double
, и необходимо вывести каждое значение в консольном окне. Чтобы сделать это, используем следующий код:

foreach (double SomeElement in MyArray) {

 Console.WriteLine(SomeElement);

}

Отметим что в этом цикле

SomeElement
является именем, присвоенным переменной для итерации по циклу; здесь можно выбрать любое имя не конфликтующее с другими именами переменных.

Запишем также приведенный выше цикл следующим образом:

foreach (double SomeElement in MyArray)

 Console.WriteLine(SomeElement);

так как блочные инструкции в C# работают таким же образом, как составные инструкции в C++.

Этот цикл будет иметь точно такой же результат, как и следующий:

for (int I=0; I < MyArray.Length; I++) {

 Console.WriteLine(MyArray[i]);

}

(Отметим, что вторая версия иллюстрирует также, как получить число элементов в массиве в C#. Мы рассмотрим, как массив объявляется в C#, позже.)

Отметим, однако, что в отличие от доступа к элементам массива, цикл

foreach
предоставляет к своим элементам доступ только для чтения. Следовательно, следующий код не будет компилироваться.

foreach (double SomeElement in MyArray)

 SomeElement *= 2; // Неверно, для SomeElement нельзя выполнить

// присваивание

Мы упомянули, что цикл

foreach
может использоваться для массивов или коллекций. Коллекция не имеет аналога в C++, хотя концепция стала общераспространённой в Windows благодаря ее использованию в VB и COM. Коллекция по сути является классом, который реализует интерфейс
IEnumerable
. Так как это включает поддержку из базовых классов, понятие коллекция объясняется в главе 7.

  • Читать дальше
  • 1
  • ...
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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