为什么我不能在三元if语句中将可空int设置为null?

Abe*_*ler 43 c# asp.net

下面的C#代码:

int? i;
i = (true ? null : 0);
Run Code Online (Sandbox Code Playgroud)

给我错误:

无法确定条件表达式的类型,因为'<null>'和'int'之间没有隐式转换

这不应该有效吗?我在这里失踪了什么?

Luk*_*keH 95

编译器尝试评估右手表达式.nullnull0int文字,不是int?.编译器试图告诉您它无法确定表达式应该评估的类型.null和之间没有隐式转换int,因此错误消息.

您需要告诉编译器表达式应该评估为int?.有之间的隐式转换int?int之间,或者nullint?,因此无论这些应该工作:

int? x = true ? (int?)null : 0;

int? y = true ? null : (int?)0;
Run Code Online (Sandbox Code Playgroud)


cod*_*ife 17

在处理三元运算符时,您需要使用default()关键字而不是null.

例:

int? i = (true ? default(int?) : 0);
Run Code Online (Sandbox Code Playgroud)

或者,你可以抛出null:

int? i = (true ? (int?)null : 0);
Run Code Online (Sandbox Code Playgroud)

我个人坚持使用default()符号,这只是一种偏好,真的.但你应该最终坚持一个特定的符号,恕我直言.

HTH!