此代码无法编译。我错在期待它吗?
<heading>3 Some Heading</heading>
<heading>5.2 some Heading 4 Something</heading>
<heading>Another One</heading>
<heading>For good Measure 2</heading>
问题是编译器说它无法确定条件运算符的返回类型。
答案 0 :(得分:2)
编译器只考虑2个操作数的类型和它们之间的隐式转换。它不会查找基类型或实现的接口。
您需要将其中一个操作数显式转换为I
。
?:运算符的第二个和第三个操作数x和y控制条件表达式的类型。
•如果x的类型为X且y的类型为Y,则
o如果从X到Y存在隐式转换(第6.1节),而不是从Y到X,则Y是条件表达式的类型。
o如果从Y到X存在隐式转换(第6.1节),而不是从X到Y,则X是条件表达式的类型。
o否则,无法确定表达式类型,并发生编译时错误。
如果编译器也检查了基类型,那么任何类型的组合都是有效的 - 在最坏的情况下,结果类型将是object
。
答案 1 :(得分:0)
您需要将其中一个操作数强制转换为I
。像这样:
I mything = someBoolCondition ? (I) new A() : new B();