Оператор объединения C# с 3 возможными возвращаемыми значениями?
Просто читая о спецификациях для этого оператора ??
так как он принимает левую сторону и, если ноль возвращает значение на правой стороне.
Мой вопрос, могу ли я получить 3 возможных значения вместо этого?
Что-то вроде этого:
int? y = null;
int z = 2;
int x = y ?? (z > 1 ? z : 0);
Это возможно?
4 ответа
Абсолютно - вы могли бы использовать ??
так же, как любой другой бинарный оператор, это означает, что вы можете иметь любое выражение слева и / или справа.
Например, вы можете сделать что-то вроде этого:
int? a = ...
int? b = ...
int? c = ...
int? d = ...
int? res = (condition_1 ? a : b) ?? (condition_2 ? c : d);
Это выражение будет оценивать (condition_1 ? a : b)
во-первых, проверьте, если это null
, а затем либо используйте ненулевое значение в качестве результата, либо оцените правую часть, и используйте его в качестве результата.
Вы также можете "связать" нулевые операторы слияния ??
, как это:
int? res =a ?? b ?? c ?? d;
Оценка этого выражения идет слева направо.
??
является бинарным оператором, но второй операнд (правая часть) может быть любым выражением, которое вы хотите (при условии, что он имеет подходящий тип возврата, который должен быть объединен с первым операндом). Так что да, второй операнд может быть (z > 1 ? z : 0)
, Это не делает ??
иметь 3 возможных возвращаемых значений.
Ваш код совершенно законный, как есть. Вы также можете сделать что-то вроде:
int x = a ?? b ?? c;
Да, это возможно. Попробуйте скомпилировать и сделать тест, который вы должны проверить сами.