以下代码无法编译:
//int a = ...
int? b = (int?) (a != 0 ? a : null);
为了编译,需要改为
int? b = (a != 0 ? a : (int?) null);
既然两者b = null
and b = a
是合法的,这对我来说没有意义。
为什么我们必须投射null
进入一个int?
为什么我们不能简单地为整个表达式提供显式类型转换(我知道在其他情况下这是可能的)?
来自 C# 语言规范第 7.13 章:
?: 运算符的第二个和第三个操作数控制条件表达式的类型。设 X 和 Y 为第二个和第三个操作数的类型。然后,
- 如果 X 和 Y 是相同类型,则这就是条件表达式的类型。
- 否则,如果存在从 X 到 Y 的隐式转换(第 6.1 节),但不存在从 Y 到 X 的隐式转换,则 Y 是条件表达式的类型。
- 否则,如果存在从 Y 到 X 的隐式转换(第 6.1 节),但不存在从 X 到 Y 的隐式转换(第 6.1 节),则 X 是条件表达式的类型。
- 否则,无法确定表达式类型,并且会发生编译时错误。
在您的情况下,没有从 int 到 null 的隐式转换,也没有相反的转换。你的强制转换解决了问题,int可以转换为int吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)