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
'.
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
double? test = true ? (double?)null : 1.0;
will work. That's because there is no conversion from the type of the first expression (null
) to the type of the second expression (double
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With