获取类的常规类型<t>使用类型类型</t>

时间:2012-02-06 07:46:48

标签: c#

我有一个名为MyGeneralClass的通用类:

public MyGeneralClass<T> {

public List<T> Data {get; set;}

}

我还有另一种方法需要使用它:

public void GetData(Type type) {



}

我这样使用GetData

GetData(typeof(MyGeneralClass<person>));

所以我的问题是如何在T方法中找到person的类型(在此示例中为GetData),我无法更改{{1}的参数但我可以改变它的实现。有没有人对此有任何想法?

5 个答案:

答案 0 :(得分:6)

通过反思:

if(type.IsGenericType &&
     type.GetGenericTypeDefinition() == typeof(MyGeneralClass<>))
{
   Type firstArg = type.GetGenericArguments()[0];
}

答案 1 :(得分:2)

您可以使用GetGenericArguments方法:

Type t = type.GetGenericArguments()[0];

答案 2 :(得分:1)

Type.GetGenericArguments返回一般参数的数组,即示例中的{person}

答案 3 :(得分:1)

您可以将GetGenericArguments用于此目的。

Type[] genericArguments = type.GetGenericArguments();

在你的情况下,Person将是这个数组中的第一个类型。

答案 4 :(得分:1)

typeof(MyGeneralClass<person>).GetGenericTypeDefinition()