0

我有三个班级:

public class BaseEntity
{
 //properties
}

public class Order:BaseEntity
{
 //properties
}

public class Customer:BaseEntity
{
 //properties
}

我还有一个可以用Customers 填充或用Orders 填充的列表:

IList nongenericList = SomeMethodGetObjects(); //this method return list of customers or list of Orders

有什么方法可以nongenericList在运行时检测对象类型并创建适当的通用列表(在运行时)并nongenericList转换到这个创建的通用列表?例如,如果nongenericList包含订单,它会制造List<Order>,如果nongenericList包含客户,它会制造List<Customer>

4

5 回答 5

2
List<BaseEntity> input= GetData();
foreach(BaseEntity item in input)
{
   if( item is Order)
      // Do Sth;
   else if( item is Customer)
      // Do sth else
}
于 2013-05-29T08:12:29.277 回答
1
IList nonGenericList = ......

List<Customer> genericList = nonGenericList.OfType<Customer>().ToList();
于 2013-05-29T08:13:36.303 回答
0

我认为你需要通过创建不同的列表来明确地做到这一点。如果您愿意,您可以一次创建所有列表,或者您可以检查类型,然后创建基本类型的列表。

创建特定类型列表的示例。

List<Order> genericOrderList = nongenericlist.Where(x=>x is Order)
于 2013-05-29T08:13:32.443 回答
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>();
    }
于 2013-05-29T08:14:22.260 回答
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
}
于 2013-05-29T08:14:49.297 回答