Первый операнд — выражение, для которого существует неявное преобразованак логическому типу. Если результат вычисления первого операнда равен true, то
результатом условной операции будет значение второго операнда, иначе — третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип может различаться.
Тип результата операции зависит от типа второго и третьего операндов:
□ если операнды одного типа, он и становится типом результата операции (это наиболее часто используемый вариант применения тернарной операции);
□ иначе, если существует неявное преобразование типа от операнда 2 к операнду 3, но не наоборот, то типом результата операции становится тип операнда 3
□ иначе, если существует неявное преобразование типа от операнда 3 к операн
ду 2, но не наоборот, то типом результата операции становится тип операнда 2;
□ иначе возникает ошибка компиляции.
Условную операцию часто используют вместо условного оператора if (он рассматривается в следующей главе) для сокращения текста программы.
|
|
Пример применения условной операции представлен в листинге 3.8.
Листинг 3.8. Условная операция
using System;
namespace ConsoleApplication1
{
class Class1l
{
static void Main()
{
int a = 11, b = 4;
int max = b > a? b: a;
Console.WriteLine(max); // Результат 11
}
}
}
Другой пример применения условной операции: требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает n, а иначе принимала значение 1. Это удобно реализовать следующим образом:
1 - (1 < n)? 1 + 1: 1;
Условная операция правоассоциативна, то есть выполняется справа налево. Например, выражение а? b: с? d: е вычисляется как а? b: (с? d: е).