C# 获取类的常规类型<;T>;使用类型

C# 获取类的常规类型<;T>;使用类型,c#,C#,我有一个名为MyGeneralClass的常规类: public MyGeneralClass<T> { public List<T> Data {get; set;} } 我像这样使用GetData: GetData(typeof(MyGeneralClass<person>)); GetData(typeof(MyGeneralClass)); 所以我的问题是,如何在GetData方法中找到T的类型(在本例中为person),我不能更改GetDa

我有一个名为MyGeneralClass的常规类:

public MyGeneralClass<T> {

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

}
我像这样使用
GetData

GetData(typeof(MyGeneralClass<person>));
GetData(typeof(MyGeneralClass));
所以我的问题是,如何在
GetData
方法中找到
T
的类型(在本例中为
person
),我不能更改
GetData
的参数,但我可以更改其实现。有人知道吗?

通过反射:

if(type.IsGenericType &&
     type.GetGenericTypeDefinition() == typeof(MyGeneralClass<>))
{
   Type firstArg = type.GetGenericArguments()[0];
}
if(type.IsGenericType&&
type.GetGenericTypeDefinition()==typeof(MyGeneralClass))
{
Type firstArg=Type.GetGenericArguments()[0];
}
返回泛型参数数组,即示例中的
{person}

您可以使用以下方法:

你可以为此目的使用

Type[] genericArguments = type.GetGenericArguments();
在您的情况下,Person将是此数组中的第一个类型。

typeof(MyGeneralClass).GetGenericTypeDefinition()
typeof(MyGeneralClass<person>).GetGenericTypeDefinition()

var myClass=new myClass();GetType(typeof(MyClass));//type.IsGenericType为false GetType(myClass.GetType());//type.IsGenericType是真的
如何绕过它?@MichalB
MyClass
MyClass
完全无关-
MyClass
是非泛型类型
MyClass
是一种开放的泛型类型
MyClass
是一个封闭的泛型type@Marc格雷威尔:哎呀。我检查的时候忘了加上:P.效果很好。
Type[] genericArguments = type.GetGenericArguments();
typeof(MyGeneralClass<person>).GetGenericTypeDefinition()