Условная операция в C# часто используется вместо условного оператора if – then – else для организации ветвлений на две ветви, что приводит в целом к сокращению текста программы. Такая операция является тернарной, поскольку содержит три операнда. Общий вид операции:
Оп_1? Оп_2: Оп_3;
где
- Оп_1 – первый операнд: выражение, неявно приводимое к логическому типу, – условие ветвления;
- Оп_2 – второй операнд: его значение принимается за значение условной операции, если значение первого операнда равно true;
- Оп_3 – третий операнд: его значение принимается за значение условной операции, если значение первого операнда равно false.
Например:
max = b > а ? b : а;
переменной max будет присвоено значение b, если выполняется условие (b> а), и значение а, если – нет.
В общем случае типы Оп_2 и Оп_3 могут не совпадать. Каков же тип результата данной операции будет в таком случае? Тип результата условной операции определяется по типам Оп_2 и Оп_3 в соответствии со следующими правилами:
- при совпадении типов Оп_2 и Оп_3 операндов их тип является типом результата операции;
- иначе, если существует неявное преобразование типа Оп_2 к типу Оп_3, но не существует неявное преобразование типа Оп_3 к типу Оп_2, то тип результата операции равен типу Оп_3;
- иначе, если существует неявное преобразование типа Оп_3к типу Оп_2, но не существует неявное преобразование типа Оп_2 к типу Оп_3, то тип результата операции равен типу Оп_2;
- иначе возникает ошибка компиляции.