为什么我不能在条件运算符中返回具有共同祖先的兄弟类型?
为什么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();
}
}
答案 0 :(得分:5)
来自documentation for the ternary operator:
条件? first_expression:second_expression;
first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。
两种数据类型(Circle
和Rectangle
)不一样。它们之间也没有implicit conversion。因此,这是不合法的。
如果将两者都转换为Polygon
,则它会传递第一个条件。如果你只将其中一个投射为'Polygon',它会通过第二个条件。
答案 1 :(得分: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();
}
}