Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C#.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
10 Мб
Скачать
☆

3.13Тернарный оператор

Тернарный оператор (?) относится к числу самых примечательных в C#. Он представляет собой условный оператор и часто используется вместо определенных видов конструкций if-then-else. Ниже приведена общая форма этого оператора:

Выражение1 ? Выражение2 : ВыражениеЗ;

Здесь Выражение1 должно относиться к типу bool а Выражение2 и ВыражениеЗ — к одному и тому же типу. Обратите внимание на применение двоеточия и его местоположение в операторе ?. Значение выражения ? определяется следующим образом. Сначала вычисляется Выражение1. Если оно истинно, то вычисляется Выражение2, а полученный результат определяет значение всего выражения ? в целом. Если же Выражение1 оказывается ложным, то вычисляется ВыражениеЗ, и его значение становится общим для всего выражения ?:

int b, c;

c = -4;

b = c >= 0 ? c : c*c; // b = 16

Присваивать переменной результат выполнения оператора ? совсем не обязательно. Например, значение, которое дает оператор ?, можно использовать в качестве аргумента при вызове метода. А если все выражения в операторе ? относятся к типу bool, то такой оператор может заменить собой условное выражение в цикле или операторе if. Давайте рассмотрим пример использования тернарного оператора:

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int result;

// Реализуем функцию модуля числа

for (int i = 5; i >= -5; i--)

{

result = i >= 0 ? i : -i;

Console.Write("{0}\t", result);

}

Console.WriteLine("\n\n");

// Выбор четных чисел

for (int i = 0; i < 10; i++)

if (i % 2 == 0 ? true : false) Console.Write("{0}\t",i);

Console.ReadLine();

}

}

}

3.14Условные операторы

Условные операторы позволяют управлять потоком выполнения программы, чтобы не выполнялась каждая строка кода, как она следует в программе. Давайте рассмотрим все условные операторы языка C#:

Оператор if

Для организации условного ветвления язык C# унаследовал от С и С++ конструкцию if...else. Ее синтаксис должен быть интуитивно понятен для любого, кто программировал на процедурных языках:

If (условие)

оператор (операторы)

else

оператор (операторы)

Если по каждому из условий нужно выполнить более одного оператора, эти операторы должны быть объединены в блок с помощью фигурных скобок {...}. (Это также касается других конструкций C#, в которых операторы могут быть объединены в блок — таких как циклы for и while.)

Стоит обратить внимание, что в отличие от языков С и С++, в C# условный оператор if может работать только с булевскими выражениями, но не с произвольными значениями вроде -1 и 0.

В операторе if могут применяться сложные выражения, и он может содержать операторы else, обеспечивая выполнение более сложных проверок. Синтаксис похож на применяемый в аналогичных ситуациях в языках С (С++) и Java. При построении сложных выражений в C# используется вполне ожидаемый набор логических операторов. Давайте рассмотрим следующий пример:

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string myStr;

Console.WriteLine("Введите строку: ");

myStr = Console.ReadLine();

if (myStr.Length < 5)

Console.WriteLine("\nВ данной строке меньше 5 символов");

else if ((myStr.Length >= 5) && (myStr.Length <= 12))

Console.WriteLine("\nВ данной строке {0} символов",myStr.Length);

else Console.WriteLine("\nВ данной строке больше 12 символов");

Console.ReadLine();

}

}

}

Как видите количество else if, добавляемых к единственному if, не ограничено. Один момент, который следует отметить касательно if: фигурные скобки применять не обязательно, если в условной ветви присутствует только один оператор, как показано в исходном примере.

Оператор switch

Вторым оператором выбора в C# является оператор switch, который обеспечивает многонаправленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то, что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных операторов if, во многих случаях более эффективным оказывается применение оператора switch. Этот оператор действует следующим образом. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора switch:

switch(выражение) {

case константа1:

последовательность операторов

break;

case константа2:

последовательность операторов

break;

case константаЗ:

последовательность операторов

break;

...

default:

последовательность операторов

break;

}

Хотя оператор switch...case должен быть знаком программистам на С и С++, в C# он немного безопаснее, чем его эквивалент С++. В частности, он запрещает "сквозные" условия почти во всех случаях. Это значит, что если часть case вызывается в начале блока, то фрагменты кода за последующими частями case не могут быть выполнены, если только не используется явно оператор goto для перехода к ним. Компилятор обеспечивает это ограничение за счет того, что требует, чтобы за каждой частью case следовал оператор break, в противном случае он выдает ошибку.

Важно отметить, что заданное выражение в операторе switch должно быть целочисленного типа (char, byte, short или int), перечислимого или же строкового. А выражения других типов, например с плавающей точкой, в операторе switch не допускаются. Зачастую выражение, управляющее оператором switch, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе switch не допускается наличие двух одинаковых по значению констант выбора.

Давайте на примере рассмотрим использование оператора switch:

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Введите язык (C#, VB или C++)");

string myLanguage = Console.ReadLine();

sw1(myLanguage);

Console.ReadLine();

}

// Данный метод выводит выбор пользователя

static void sw1(string s)

{

switch (s)

{

case "C#":

Console.WriteLine("Вы выбрали язык C#");

break;

case "VB":

Console.WriteLine("Вы выбрали язык Visual Basic");

break;

case "C++":

Console.WriteLine("Вы выбрали язык С++");

break;

default:

Console.WriteLine("Такой язык я не знаю");

break;

}

}

}

}