Причина в том, что вы не можете присвоить null
для double
, и ваше троичное выражение возвращает double
, а не double?
.Поскольку null
не имеет неявного типа, тип возврата вашего троичного выражения определяется частью, которая имеет неявного типа, то есть той части, которая возвращает d
.Поскольку d
является double
, все ваше троичное выражение оценивается как возвращающее double
.
Исправьте его, приведя одно из возвращений к double?
, например
double d;
double? a = double.TryParse("3.14", out d) ? (double?)d : null;