Why doesn't this C# code compile?

.net, c#, nullable

Solution

This happens because the compiler tries to evaluate the statement from right to left. This means that it sees `1.0` and it decides it is double (not double?) and then it sees `null`.

So there is clearly no implicit conversion between `double` and `null` (in fact there is no implicit conversion between `Struct` and `null`).

What you can do is explicitly tell the compiler that one of the two expressions that are convertible to each other.

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

Problem

``` double? test = true ? null : 1.0; ``` In my book, this is the same as ``` if (true) { test = null; } else { test = 1.0; } ``` But the first line gives this compiler error: Type of conditional expression cannot be determined because there is no implicit conversion between '`<null>`' and '`double`'.

Original source

Related problems