Ну, это не совсем то же самое, что условный оператор , но я думаю, вы думаете о нулевом операторе слияния (??).(Полагаю, вы сказали, что это «похоже» :) Обратите внимание, что «троичный» относится только к числу операндов, которым является оператор - так что, хотя условный оператор является троичным, нулевой оператор слияния является двоичным оператором.
В широком смысле это выглядит так:
result = first ?? second;
Здесь second
будет оцениваться только в том случае, если first
равно нулю.Он не должен быть целью назначения - вы можете использовать его для оценки аргумента метода, например.
Обратите внимание, что первый операнд имеет , который может быть обнуляем, новторой нет.Несмотря на то, что есть определенные детали относительно преобразований, в простом случае тип общего выражения является типом второго операнда.Из-за ассоциативности, вы также можете аккуратно сложить операторы:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
Обратите внимание, что x
и y
обнуляются, а z
и result
- нет.Конечно, z
может быть обнуляемым, но тогда result
также должно быть обнуляемым.
В основном, операнды будут оцениваться в порядке, в котором они появляются в коде, соценка останавливается, когда он находит ненулевое значение.
Oh, и хотя вышеприведенное показано в терминах типов значений, оно работает и со ссылочными типами (которые всегда обнуляются).