为什么可以';t我在条件运算符中返回具有共同祖先的兄弟类型

本文关键字:返回 祖先 类型 兄弟 条件运算符 为什么 | 更新日期: 2023-09-27 18:23:50

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

为什么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();
    }
}

为什么可以';t我在条件运算符中返回具有共同祖先的兄弟类型

来自三元运算符的文档:

条件?first_expression:second_expression;

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

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

如果将两者都强制转换为Polygon,则它将通过第一个条件。如果只将其中一个强制转换为"多边形",则会通过第二个条件。

确实如此,您只需要投射:

class Polygon
{
    public int CountSides { get; set; }
}
class Rectangle : Polygon { }
class Circle : Polygon { }
class Program
{
    static void Main(string[] args)
    {
        Polygon p = true ? (Polygon)new Circle() : (Polygon)new Rectangle();
    }
}