2010-05-10 138 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); 
相关问题