您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

该规范(§7.14)说,对于条件表达式b ? x : y,有三种可能,要么xy都有一个类型 某些 良好的条件 得到满足,只有一个xy有型 某些 良好的条件 得到满足,或者编译时错误发生。在这里,“一定的条件”意味着某些转换是可能的,我们将在下面详细介绍。

现在,我们来看一下规范的相关部分:

如果只有一个xy具有类型,都xy是隐式转换为这种类型,那么这是条件表达式的类型。

这里的问题是

int? number = true ? 5 : null;

条件结果中只有一个具有类型。这里x一个int文字,并且ynull其中没有 具有类型1。因此,不满足“某些良好条件”,并且会发生编译时错误

解决此两种方法

int? number = true ? (int?)5 : null;

在这里,我们仍然只有xy类型之一。请注意,null 仍然 没有一个类型尚未编译器不会有任何问题,这一点,因为(int?)5null都是隐式转换为int?(第6.1.4节和第6.1.5节)。

另一种方法显然是:

int? number = true ? 5 : (int?)null;

但现在我们必须阅读规范中的 其他 条款,以了解为什么可以这样:

如果x有类型Xy具有类型Y,然后

如果一个隐式转换(第6.1节)从存在XY,但不能从YX,然后Y是条件表达式的类型。

如果一个隐式转换(第6.1节)从存在YX,但不能从XY,然后X是条件表达式的类型。

否则,将无法确定表达式类型,并且会发生编译时错误

x是类型inty也为类型int?。没有从int?到的隐式转换int,但是有从到的隐式转换intint?因此表达式的类型为int?

1:进一步注意,在确定条件表达式的类型时忽略了左侧的类型,这是此处常见的混淆源。

其他 2022/1/1 18:18:13 有319人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶