Это происходит из-за того, что компилятор пытается оценить оператор справа налево.
Это означает, что он видит 1.0
и решает, что он двойной (не двойной?), А затем видит null
.
Так что явно не существует неявного преобразования между double
и null
(на самом деле не существует неявного преобразования между Struct
и null
).
Что вы можете сделать, так это явно сообщить компилятору, что одно из двух выражений может быть преобразовано друг в друга.
double? test = true ? null : (double?) 1.0; // 1
double? test = true ? (double?)null : 1.0; // 2
double? test = true ? default(double?) : 1.0; // 3
double? test = true ? new double?() : 1.0; // 4