具有协方差的条件运算符

时间:2016-01-08 09:35:43

标签: c# covariance conditional-operator

此代码无法编译。我错在期待它吗?

<heading>3 Some Heading</heading>
<heading>5.2 some Heading 4 Something</heading>
<heading>Another One</heading>
<heading>For good Measure 2</heading>

问题是编译器说它无法确定条件运算符的返回类型。

2 个答案:

答案 0 :(得分:2)

编译器只考虑2个操作数的类型和它们之间的隐式转换。它不会查找基类型或实现的接口。

您需要将其中一个操作数显式转换为I

来自C# language specification

  

?:运算符的第二个和第三个操作数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();