使用条件运算符[duplicate]时不进行隐式转换

问题描述

|                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

这是预期的行为。 由于X和Y之间不存在隐式转换(即使它们共享一个公共基数,因此它们之间也没有隐式转换),因此您需要将(其中一个)显式转换(至少)到基类,以便存在隐式转换。 C#规范的详细说明:   
?:
运算符的第二和第三操作数控制条件表达式的类型。令X和Y为第二和第三操作数的类型。然后,      如果X和Y是同一类型,则这是条件表达式的类型。      否则,如果存在从X到Y的隐式转换(第6.1节),但不存在从Y到X的转换,   那么Y是条件表达式的类型。      否则,如果存在从Y到X的隐式转换(第6.1节),但不存在从X到Y的转换,   那么X是条件表达式的类型。      否则,将无法确定表达式类型,并且会发生编译时错误。     ,三元运算符与if子句之间并没有太大的区别,这与您的语句有所不同。 在第一个工作示例中,您正在Foo和AClass或Bar和AClass之间进行转换,这显然很好。 在第二个工作示例中,您要告诉三元运算符查看AClass和Bar。在第三个工作示例中,您要告诉三元运算符查看Foo和AClass。这些显然具有明显的转换。 在不工作的示例中,您要告诉它看Foo和Bar。那里没有隐式转换(例如,因为一个不是从另一个派生的)。但是,您可以继续进行明确说明并进行转换(这是您在第二个和第三个工作示例中所做的),因为可以进行转换。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...