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

下面的C#代码:

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

给我的错误:

条件expression式的types不能确定,因为在'<null>'和'int'之间没有隐式转换

这不应该有效吗? 我在这里错过了什么?

编译器试图评估右边的expression式。 nullnull0是一个int文字,不是int? 。 编译器试图告诉你,它不能确定expression式应该评估什么types。 nullint之间没有隐式转换,因此是错误消息。

你需要告诉编译器该expression式应该评估为int?int?之间有一个隐式转换int?int ,或者nullint?之间int? ,所以这些应该工作:

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

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

例:

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

或者,您可以只投射null:

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

我个人坚持default()表示法,这只是一个偏好,真的。 但是,你最终应该坚持一个特定的记法,恕我直言。

HTH!

部分(true ? null : 0)以某种方式成为函数。 这个函数需要返回types。 当编译器需要确定返回types时,它不能。

这工作:

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