c# – 使用条件运算符时没有隐式转换
这个问题在这里已经有一个答案:>
Nullable types and the ternary operator: why is `? 10 : null` forbidden? 9个
我有以下课程: abstract class AClass { } class Foo : AClass { } class Bar : AClass { } 当我试图使用它们时: AClass myInstance; myInstance = true ? new Foo() : new Bar(); 由于“CSharpTest.Class1.Foo”和“CSharpTest.Class1.Bar”之间没有隐式转换,因此无法确定条件表达式的类型,因此无法编译此代码. 但下面的示例编译ok: if (true) { myInstance = new Foo(); } else { myInstance = new Bar(); } 这也没关系 myInstance = true ? (AClass) new Foo() : new Bar(); 要么 myInstance = true ? new Foo() : (AClass) new Bar(); 为什么条件运算符和if子句的行为有如此大的差异? 解决方法
这是预期的行为.
由于X和Y之间不存在隐式转换(即使它们共享共同的基础,它们之间也不存在隐式转换),因此您需要将其中一个显式转换为基类,以便存在隐式转换. 来自C#规范的详细说明:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |