РЕДАКТИРОВАТЬ: оригинальный вопрос использовал int?
. Теперь это исправлено.
Этот код даже не скомпилируется, так что да, я бы сказал, что он слишком загадочный.
Опечатки в стороне, тот факт, что вы опубликовали это без обнаружения , что есть проблема (вы пытаетесь использовать bool
на RHS ??, когда LHS является int?
) предполагает, что это не очень хорошая идея, даже если вы понимаете это правильно.
Мне нужно увидеть пример из реальной жизни, но я думаю, что я обычно делю это на одно утверждение, используя оператор объединения нулей, а затем другое, используя условный оператор. Другой вариант заключается в использовании поведения обнуляемых типов по отношению к операторам ... но опять же, это разумно неясен. (Мне просто нужно было напомнить себе, что это за поведение!)
Мне вообще нравится нулевой оператор слияния, но я думаю, что объединение его с условным оператором просто делает его немного неясным. Я думаю, что, вероятно, я бы согласился с этим в случае, когда существенным преимуществом было то, что оно представляло собой одно выражение (например, для инициализации, когда альтернатива вводит дополнительный метод), но в целом я бы предпочел разделить его на два оператора.
РЕДАКТИРОВАТЬ: Одна альтернатива в в этом конкретном случае - просто сравнить с «истиной» - что выглядит избыточно, но не в случае bool?
:
result = (testBool == true) ? "Yes" : "No";
Скобки не нужны, конечно, но добавьте ясности IMO.
Я думаю, что это проще: результат только "Да", если testBool
действительно верно; в противном случае это «Нет». Если вы хотите «по умолчанию» на Да, вы бы написали:
result = (testBool == false) ? "No" : "Yes";