【发布时间】:2019-12-08 01:52:44
【问题描述】:
我正在制作 ASP.NET MVC 应用程序,并且我有 Order 类,但我想在其中添加 2 个附加属性以供查看。我发现我将只创建一个类ViewOrder,它派生自Order 并具有2 个附加属性,因此我可以将Order 对象分配给OrderView,然后设置这2 个属性并将此对象传递给查看。
这是正确的方法吗?当我在寻找关于铸造的答案时,人们给出了诸如“猫继承自哺乳动物。你不能将哺乳动物铸造成猫,因为它可能是一只狗”之类的例子。
列表:
var orderList = new List<Order>(_context.Orders)
就像它甚至无法编译:
List<OrderView> orderViewList = (List<OrderView>)orderList;
此编译但抛出“InvalidCastException”:
var orderViewList = orderList.Cast<OrderView>().ToList();
【问题讨论】:
-
你不能从一个基本类型的对象转换为一个更派生的类型,这就是你最后得到一个 InvalidCastException 的原因。由于源列表中的对象是订单,而不是 OrderView,因此您不能将订单强制转换为 OrderView。
-
OrderView总是Order,但Order并不总是OrderView。你可以做类似orderList.Select(order => new OrderView() { newprop = '', newprop1 = '', ///rest }).ToList() -
而且
List<BaseType>不是List<DerivedType>的基本类型,泛型不能那样工作,这就是中间代码无法编译的原因。
标签: c# asp.net asp.net-mvc