我发现了很多关于条件表达式的文章,但是我不确定为什么它会引发编译错误(由于没有隐式转换,因此无法确定条件表达式的类型)。
有两个class
,每个继承自抽象基础class
,
为什么不能用条件表达式创建基本类型的对象?
class abstract FigureBase
class Triangle : FigureBase
class Circle : FigureBase`
static void Main(string[] args)
{
FigureBase fig;
fig = (true) ? new Circle() : new Triangle();
Console.ReadKey();
}
当将表达式侧之一转换为基本类型时可以使用:
fig = (true) ? new Circle() : (FigureBase)new Triangle();
或
fig = (true) ? (FigureBase)new Circle() : new Triangle();
Found :
如果x具有X类型,而y具有Y类型,则
如果存在从X到Y的隐式转换(第6.1节),但不存在从Y到X的转换, 那么Y是条件表达式的类型。
如果存在从Y到X的隐式转换(第6.1节),但不存在从X到Y的转换, 那么X是条件表达式的类型。
否则,无法确定表达式类型,并且会发生编译时错误 发生。
但是如果X和Y的类型为Z,该怎么办?