2013-05-29 58 views
0

我有三類:創建在運行時的非泛型列表的通用列表

public class BaseEntity 
{ 
//properties 
} 

public class Order:BaseEntity 
{ 
//properties 
} 

public class Customer:BaseEntity 
{ 
//properties 
} 

我也有可能與Customer個飽或Order個飽列表:

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

有沒有什麼辦法可以在運行時檢測nongenericList對象類型並創建適當的通用列表(在運行時)並將nongenericList轉換爲創建的通用列表? 例如,如果nongenericList包含訂單,它使List<Order>,如果nongenericList包含的客戶,它使List<Customer>

+0

這可以幫助你http://stackoverflow.com/questions/2510781/generic-list-created -at-runtime –

+0

你說的這個非通用'List'類是什麼?你能提供一個指向MSDN文檔的鏈接嗎?你能提供一個創建一個的代碼片段嗎? –

+0

對不起,我的意思是IList。 – Masoud

回答

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

這似乎是一種比反思更好的方法。 –

0

我認爲你需要通過創建不同的列表明確地做到這一點。如果你想要的話,你可以一次創建所有的列表,或者你可以檢查類型,然後創建基本類型的列表。

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

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

List<Customer> genericList = nonGenericList.OfType<Customer>().ToList(); 
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>(); 
    } 
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 
}