我可以获得对象的泛型类型吗?

时间:2010-05-10 13:22:32

标签: c# list generics

这是我的方法:GetListItemsPainted<T>(List<T> list) 我不知道该列表的类型是什么,

如何创建具有传递列表类型的新列表?

类似的东西:

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

如何将我的列表转换为真实类型,以便我拥有所有属性等等?

感谢

2 个答案:

答案 0 :(得分:10)

您可以使用T创建一个列表:

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

如果您必须获取该类型,则可以使用typeof。这与您要求的类似,但有其他用途,您不需要它来使泛型工作:

Type myType = typeof(T);

答案 1 :(得分:1)

您不必创建新的List,您已经拥有了一个。

如果您需要特定类型,请使用where constraint

约束您的通用类型参数

如果您打算对各种任意类型做出反应,这在我看来是一个糟糕的设计决定,那么您将需要使用.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.
}

但是,我会考虑使用约束。