I am trying to figure out why casts are required in the following examples:
bool test = new Random().NextDouble() >= 0.5;
short val = 5;
// Ex 1 - must cast 0 to short
short res = test ? 5 : 0; // fine
short res = test ? val : 0; // error
short res = test ? val : (short)0; // ugly
// Ex 2 - must cast either short or null to short?
short? nres = test ? val : null; // error
short? nres = test ? (short?)val : null; // ugly
short? nres = test ? val : (short?)null; // ugly
short? nres = test ? val : default(short?); // ugly
The first example just seems crazy to me. If short i = 0;
compiles, why can't the compiler implicitly treat the 0 (or any other valid short
value) as a short
in the above code?
The second example makes more sense to me. I understand that the compiler is unable to determine the type of the expression on the right side of the =
, but IMO it should take nullable types into account when doing so.
I'd like to understand if there is actual reasoning behind these compiler errors.