我不知道我问这个问题的方式是否正确,但这是我想做的:
型号
public abstract class IncomingOrderBase
{
public string Summary { get; set; }
}
public class IncomingProductOrder : IncomingOrderBase
{
public Product Product { get; set; }
}
public class IncomingServiceOrder : IncomingOrderBase
{
public Service Service { get; set; }
}
public class Sale
{
public ICollection<IncomingProductOrder> ProductOrders { get; set; }
public ICollection<IncomingServiceOrder> ServiceOrders { get; set; }
public List<IncomingOrderBase> GetAllOrders()
{
var orders = this.ProductOrders +++PLUS+++ this.ServicesOrders;
return orders.ToList();
}
}
用法
foreach(var order in sale.GetAllOrders())
{
Console.WriteLine(order.GetType().Name);
//output = "ProductOrder" or "ServiceOrder" not "IncomingOrderBase"
}
如何将两个(或更多)列表编译成一个列表,然后从结果列表中获取原始(派生)类型?我想我已经使用 Concat()
让它工作了,但我真的很感谢专家的例子。
最佳答案
是的,Concat
是你想要的:
public List<IncomingOrderBase> GetAllOrders()
{
return ProductOrders.Concat<IncomingOrderBase>(ServicesOrders).ToList();
}
请注意,这仅适用于 .NET 4,它具有 IEnumerable<T>
的通用协方差.如果您使用的是 .NET 3.5,则需要
public List<IncomingOrderBase> GetAllOrders()
{
return ProductOrders.Cast<IncomingOrderBase>()
.Concat(ServicesOrders.Cast<IncomingOrderBase>())
.ToList();
}
关于c# - 将多态列表合并为一个列表并获取派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385012/