我有三个班级:
public class BaseEntity
{
//properties
}
public class Order:BaseEntity
{
//properties
}
public class Customer:BaseEntity
{
//properties
}
我也有一个列表可以填充Customer
或填写Order
s:
IList nongenericList = SomeMethodGetObjects(); //this method return list of customers or list of Orders
有没有办法在运行时检测nongenericList
个对象类型并创建适当的通用列表(在运行时)并将nongenericList
转换为此创建的通用列表?
例如,如果nongenericList
包含订单,它会生成List<Order>
,如果nongenericList
包含客户,则会生成List<Customer>
?
答案 0 :(得分:2)
List<BaseEntity> input= GetData();
foreach(BaseEntity item in input)
{
if( item is Order)
// Do Sth;
else if( item is Customer)
// Do sth else
}
答案 1 :(得分:1)
IList nonGenericList = ......
List<Customer> genericList = nonGenericList.OfType<Customer>().ToList();
答案 2 :(得分:0)
我认为你需要通过创建不同的列表来做到这一点。如果您愿意,可以一次创建所有列表,也可以检查类型,然后创建基本类型列表。
创建特定类型列表的示例。
List<Order> genericOrderList = nongenericlist.Where(x=>x is Order)
答案 3 :(得分:0)
您可以检查类型,然后将其投射到相关列表中。
Type type = nongenericList[0].GetType();
if (type.Equals(typeof(Customer)))
{
List<Customer> c = nongenericList.Cast<Customer>().ToList<Customer>();
}
else if (type.Equals(typeof(Order)))
{
List<Order> c = nongenericList.Cast<Order>().ToList<Order>();
}
答案 4 :(得分:0)
如果您可以假设列表中的所有项目都属于同一类型:
if (nongenericList.Count == 0) {
// no items
} else if (nongenericList[0] is Order) {
List<Order> orders = nongenericList.Cast<Order>();
// use the list here
} else {
List<Customer> customers = nongenericList.Cast<Customer>();
// use the list here
}