【发布时间】:2018-06-09 06:31:33
【问题描述】:
如果我可以将任何子类型分配给超类型引用(向上转换):
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();
}
【问题讨论】:
-
如果 WService 和 WServiceStub 都实现了 IDisposable 以及 IWService,那么表达式
isStub ? new WServiceStub() : new WService()应该具有哪种类型?
标签: c# casting conditional-operator