【发布时间】:2014-04-29 05:00:27
【问题描述】:
class Order { ... }
class OrderA : Order { ... }
class OrderB : Order { ... }
class OrderC : Order { ... }
class OrderD : Order { ... }
private Order GetOrder() { ... }
我怎样才能有一个方法将返回的 Order 对象动态转换为任何特定对象:
private T GetSpecificOrder<T>(T order) : where T : Order
{
...
}
我想这样称呼它:
var myOrder = GetOrder();
var specificOrder = GetSpecificOrder<Order>(myOrder);
HandleOrder(specificOrder);
我希望将 specificOrder 对象实例化为子类之一,因此我可以这样称呼它:
HandleOrder(OrderA o) { ... }
HandleOrder(OrderB o) { ... }
HandleOrder(OrderC o) { ... }
HandleOrder(OrderD o) { ... }
我做错了什么?
【问题讨论】:
-
如果从
GetOrder返回的订单不是正确的类型,您不能只将其转换为A 或B。您必须实际进行映射并实例化正确的类型。如果类型不匹配,则不能向上投射。
标签: c# .net generics visual-studio-2008 .net-3.5