Nullable types and the ternary operator: why is `? 10 : null` forbidden?

.net, c#, conditional-operator, nullable

Solution

The compiler first tries to evaluate the right-hand expression:

GetBoolValue() ? 10 : null

The `10` is an `int` literal (not `int?`) and `null` is, well, `null`. There's no implicit conversion between those two hence the error message.

If you change the right-hand expression to one of the following then it compiles because there is an implicit conversion between `int?` and `null` (#1) and between `int` and `int?` (#2, #3).

GetBoolValue() ? (int?)10 : null    // #1
GetBoolValue() ? 10 : (int?)null    // #2
GetBoolValue() ? 10 : default(int?) // #3

Problem

I just came across a weird error: ``` private bool GetBoolValue() { //Do some logic and return true or false } ``` Then, in another method, something like this: ``` int? x = GetBoolValue() ? 10 : null; ``` Simple, if the method returns true, assign 10 to the Nullable`int` x. Otherwise, assign null to the nullable int. However, the compiler complains: Error 1 Type of conditional expression cannot be determined because there is no implicit conversion between `int` and `<null>`. Am I going nuts?

Original source

Related problems