C# 4.0: полное руководство | страница 76



>


В данном примере переменной >absval присваивается значение переменной >val, если оно больше или равно нулю. Если же значение переменной >val отрицательно, то переменной >absval присваивается результат отрицания этого значения, что в итоге дает положительное значение.

Ниже приведен еще один пример применения оператора >?. В данной программе одно число делится на другое, но при этом исключается деление на нуль.


>// Исключить деление на нуль, используя оператор?.

>using System;

>class NoZeroDiv {

>  static void Main() {

>    int result;

>    for(int i = -5; i < 6; i++) {

>      result = i != 0 ? 100 / i : 0;

>      if (i != 0)

>        Console.WriteLine("100 / " + i + " равно " + result);

>    }

>  }

>}


Выполнение этой программы дает следующий результат.


>100 / -5 равно -20

>100 / -4 равно -25

>100 / -3 равно -33

>100 / -2 равно -50

>100 / -1 равно -100

>100 / 1 равно 100

>100 / 2 равно 50

>100 / 3 равно 33

>100 / 4 равно 25

>100 / 5 равно 20


Обратите особое внимание на следующую строку из приведенной выше программы.


>result = i != 0 ? 100 / i : 0;


В этой строке переменной >result присваивается результат деления числа 100 на значение переменной i. Но это деление осуществляется лишь в том случае, если значение переменной i не равно нулю. Когда же оно равно нулю, переменной >result присваивается значение, обнуляющее результат.

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


>// Разделить только на четные, ненулевые значения.

>using System;

>class NoZeroDiv2 {

>  static void Main() {

>    for(int i = -5; i < 6; i++)

>      if(i != 0 ? (i % 2 == 0) : false)

>        Console.WriteLine("100 / " + i + " равно " + 100 / i);

>  }

>}


Обратите внимание на оператор >if в приведенной выше программе. Если значение переменной i равно нулю, то оператор >if дает ложный результат. А если значение переменной i не равно нулю, то оператор >if дает истинный результат, когда значение переменной i оказывается четным, и ложный результат, если оно нечетное. Благодаря этому допускается деление только на четные и ненулевые значения. Несмотря на то что данный пример служит лишь для целей демонстрации, подобные конструкции иногда оказываются весьма полезными.