条件运算符赋值[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条件运算符赋值[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

如果我可以将任何子类型分配给超类型引用(向上转换):

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();
}
答案

这是因为第三个操作数的类型必须可以转换为第二个操作数的类型,在确定表达式的结果类型时,它不会查看赋值的左侧。

以上是关于条件运算符赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 中的竞争条件与复合赋值

4.3 合并重复的条件执行片段

赋值运算

Python算术运算符赋值运算符关系运算符逻辑运算符条件运算符(三元运算符)

我的重构第一步

为啥要使用三元运算符而不为“真”条件赋值 (x = x ?: 1)