如果我可以将任何子类型分配给超类型引用(向上转换):
IWService wService;
wService = new WService();
wService = new WServiceStub();
为什么我不能在条件运算符? :
中分配它们?
IWService wService = isStub ? new WServiceStub() : new WService();
我收到此错误:
由于存在,因此无法确定条件表达式的类型 MyNamespace.WServiceStub和MyNamespace.WService之间没有隐式转换
但它足以将其中一个转换为超类型来编译:
IWService wService = isStub ? (IWService)new WServiceStub() : new WService();
或
IWService wService = isStub ? new WServiceStub() : (IWService)new WService();
如果我永远不会得到InvalidCastException
,我不明白为什么我需要一个明确的演员。转换总是肯定的,不是吗?
以下代码是否完全相同?
IWService wService;
if (isStub)
{
wService = new WServiceStub();
}
else
{
wService = new WService();
}
答案 0 :(得分:0)
这是因为第三个操作数的类型必须可以转换为第二个操作数的类型,在确定表达式的结果类型时,它不会查看赋值的左侧。