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

时间:2010-05-04 16:06:09

标签: c# asp.net

下面的C#代码:

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

给我错误:

  

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

这不应该有效吗?我在这里缺少什么?

3 个答案:

答案 0 :(得分:92)

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

您需要告诉编译器表达式应该评估为int?int?int之间或nullint?之间存在隐式转换,因此其中任何一个都应该有效:

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

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

答案 1 :(得分:15)

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

示例:

int? i = (true ? default(int?) : 0);

或者,您可以直接转换null:

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

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

HTH!

答案 2 :(得分:1)

部分(true ? null : 0)在某种程度上成为一种功能。此函数需要返回类型。当编译器需要找出它不能的返回类型时。

这有效:

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