c# - 条件运算符会感到困惑,但为什么呢?

标签 c# inheritance compiler-construction

<分区>

假设有两个类,都是同一个父类(super class)的后代,如下所示:

class MySuperClass{}
class A : MySuperClass{}
class B : MySuperClass{}

那么这个赋值不会通过编译器:

MySuperClass p = myCondition ? new A() : new B();

编译器提示 A 和 B 不兼容(无法确定条件表达式的类型,因为“A”和“B”之间没有隐式转换 [CS0173])。但它们都是 MySuperClass 类型,所以在我看来这应该可行。并不是说这有什么大不了的;只需一个简单的转换就可以启发编译器。但它肯定是 C# 编译器中的一个障碍?你不同意吗?

最佳答案

条件的结果应该是相同的类型。他们不是。

来自 MSDN , (?: 运算符):

Either the type of first_expression and second_expression must be the same, or an implicit conversion must exist from one type to the other.

由于 AB 不是同一类型,而且您似乎没有定义隐式转换,编译器会报错。

关于c# - 条件运算符会感到困惑,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087304/

相关文章:

java - 在其抽象父类(super class)中使用任何嵌套子类的泛型类型

visual-studio - dll 文件或 .exe 文件丢失

java - 在词法分析器中使用正则表达式 (Java)

c# - Visual Studio 断点警告

c# - 如何设置新用户的所属组?

C# 替换为混合值

scala - 案例类中的产品继承

c# - c# 中的正则表达式匹配模式

CSS Cascading 接管继承,如何解决?

c++ - JMP间接寻址的意义是什么