为什么我不能在条件运算符中返回具有共同祖先的兄弟类型?

Jua*_*nRO 1 c# oop inheritance type-conversion conditional-operator

为什么我不能在条件运算符中返回具有共同祖先的兄弟类型?

为什么C#不支持这个?

class Polygon
{
    public int CountSides { get; set; }
}

class Rectangle : Polygon { }

class Circle : Polygon { }

class Program
{
    static void Main(string[] args)
    {
        Polygon p = true ? new Circle() : new Rectangle();
    }
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 5

三元运算符文档:

条件?first_expression:second_expression;

first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换.

两种数据类型(CircleRectangle)不相同.它们之间也没有隐式转换.因此,这是不合法的.

如果将两者都转换为Polygon,则它会通过第一个条件.如果你只将其中一个投射为'Polygon',它会通过第二个条件.