C# 获取类的常规类型<;T>;使用类型
我有一个名为MyGeneralClass的常规类: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
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是真的
如何绕过它?@MichalBMyClass
与MyClass
完全无关-MyClass
是非泛型类型MyClass
是一种开放的泛型类型MyClass
是一个封闭的泛型type@Marc格雷威尔:哎呀。我检查的时候忘了加上:P.效果很好。
Type[] genericArguments = type.GetGenericArguments();
typeof(MyGeneralClass<person>).GetGenericTypeDefinition()