簡體   English   中英

在運行時從非泛型列表創建泛型列表

[英]create a generic list from a non-generic list in run-time

我有三節課:

public class BaseEntity
{
 //properties
}

public class Order:BaseEntity
{
 //properties
}

public class Customer:BaseEntity
{
 //properties
}

我也有一個可能用CustomerOrder填充的列表:

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

有什么方法可以在運行時檢測nongenericList對象類型並創建適當的泛型列表(在運行時)並將nongenericList轉換為此創建的泛型列表? 例如,如果nongenericList包含Orders,則使List<Order> ;如果nongenericList包含Customers,則使List<Customer>

List<BaseEntity> input= GetData();
foreach(BaseEntity item in input)
{
   if( item is Order)
      // Do Sth;
   else if( item is Customer)
      // Do sth else
}
IList nonGenericList = ......

List<Customer> genericList = nonGenericList.OfType<Customer>().ToList();

我認為您需要通過創建不同的列表來明確地做到這一點。 如果需要,可以一次創建所有列表,也可以檢查類型,然后創建基本類型的列表。

創建特定類型的列表的示例。

List<Order> genericOrderList = nongenericlist.Where(x=>x is Order)

您可以檢查類型,然后將其轉換為相關列表。

  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>();
    }

如果您可以假定列表中的所有項目都屬於同一類型:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM