【发布时间】:2015-03-18 17:19:00
【问题描述】:
考虑:
class Order
{
public List<OrderItem> OrderItems {get;set;}
}
class SalesOrder : Order
{
public List<SalesOrderItem> OrderItems {get;set;}
}
class OrderItem {}
class SalesOrderItem : OrderItem {}
尝试投射时
SalesOrder salesorder = new SalesOrder();
salesorder.OrderItems = List<SalesOrderItem>();
salesorder.OrderItems.Add(new SalesOrderItem());
Order order = salesorder;
order.Orderitems 为空。有什么方法可以让这个演员与派生属性一起工作?
我已尝试使用接口进行协方差,但无法使用 List 并且使用 IEnumerable 将不允许公共设置器。关于如何实现这一点的任何想法?
【问题讨论】:
-
这不会编译 - 似乎您在
OrderItems的OrderItems属性上缺少newSalesOrder... -
@AlexeiLevenkov,我不认为这是一个骗局。 OP 可能只是没有显示属性初始化代码。问题好像是关于
OrderItems继承,跟NRE没有关系 -
这里的问题是编译器不会将两个版本的 OrderItems 视为同一事物。继承不是那样工作的。即使是新的,演员表仍然无法按照您想要的方式工作。
-
@ChrisMantle 这是编译器警告,而不是错误。应该是国际海事组织的错误 - 它应该迫使你承认你真的在做
new。 -
我会有这样的dotnetfiddle.net/HtvDBB
标签: c# inheritance casting