Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why doesn't this C# code compile?

Tags:

c#

.net

nullable

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'.

like image 572
Robbert Dam Avatar asked May 06 '09 10:05

Robbert Dam


2 Answers

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
like image 93
leppie Avatar answered Oct 01 '22 21:10

leppie


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).

like image 33
David Schmitt Avatar answered Oct 01 '22 21:10

David Schmitt