1

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

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

2 回答 2

5

三元运算符的文档中

健康)状况 ?第一个表达式:第二个表达式;

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

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

如果您将两者都转换为Polygon,则它通过第一个条件。如果您仅将其中一个投射为“多边形”,则它会通过第二个条件。

于 2013-07-17T19:46:53.907 回答
3

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

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();
    }
}
于 2013-07-17T19:44:10.997 回答