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?