【发布时间】:2011-02-06 05:21:26
【问题描述】:
以下代码无法编译:
//int a = ...
int? b = (int?) (a != 0 ? a : null);
为了编译,需要改成
int? b = (a != 0 ? a : (int?) null);
由于b = null 和b = a 都是合法的,这对我来说没有意义。
为什么我们必须将null 转换为int?,为什么我们不能简单地为整个表达式提供一个显式类型转换(我知道在其他情况下也可以)?
【问题讨论】:
-
我只是觉得编译器不喜欢你问这么多问题。我的意思是看,你在一行中有 3 个!
-
这应该回答你的问题,为什么:stackoverflow.com/questions/2215745/…。这个问题与那个问题相当重复,但推理仍然相同。
-
请注意
int? b = a != 0 ? (int?)a : null;也可以使用