2010-05-10 95 views
2

這是我的方法:GetListItemsPainted<T>(List<T> list) ,我不知道是什麼類型的該列表,我可以得到一個對象的泛型類型嗎?

我怎樣才能創建一個能夠有通過列表類型的新名單?

是這樣的:

List<list.GetType()> newList = new List<list.GetType()>(); 

如何我投我的列表,以真正的類型,所以我將有他的所有屬性等?

感謝

回答

1

您不必創建一個新的列表,你已經有一個。

如果你需要一個特定的類型,然後用whereconstraint

限制你的泛型類型參數如果你打算到各種各樣的任意類型的,這在我看來是一個不好的設計決定的反應,那麼你將需要使用條件與.Cast<T>()

類似:

Type myListType = list.GetType().GetGenericArguments()[0]; 
// or Type myListType = typeof(T); as stated by Kobi 
if(myListType == typeof(SomeArbitraryType)) 
{ 
    var typedList = list.Cast<SomeArbitraryType>(); 
    // do something interesting with your new typed list. 
} 

但同樣,我會考慮使用一個約束。

+0

謝謝,這是非常halpfull – dubi 2010-05-16 12:49:26

+1

@dubi - 如果它提供了所需的指導,你應該點擊複選標記。 – 2010-05-17 06:27:29

10

您可以使用T列表:

List<T> newList = new List<T>(); 

如果你必須得到的類型,你可以使用typeof。這類似於你問什麼,但有其他用途,你不需要它,使仿製藥的工作:

Type myType = typeof(T); 
相關問題