[英]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
}
我也有一個可能用Customer
或Order
填充的列表:
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.