如何从对象类型获取泛型类型

时间:2011-03-06 16:06:45

标签: c# generics type-conversion

我的班级是;

class BaseClass
{

}

class DerivedClass1 : BaseClass
{

}

class GenericClass<T>
{

}

class DerivedClass2 : BaseClass
{
    GenericClass<DerivedClass1> subItem;
}

我想访问DerivedClass2类的所有字段。 我使用System.Reflection和FieldInfo.GetValue()方法;

我无法获得subItem字段。 FieldInfo.GetValue()方法的返回类型是“object”。 我不能投身GenericClass<DerivedClass1> 要么 我不能得到DerivedClass1类型。 我用BaseClass

尝试这个
BaseClass instance = FieldInfo.Getvalue(this) as GenericClass<BaseClass>;

但实例为null。 如何获取类型实例或如何只获取类型?

1 个答案:

答案 0 :(得分:2)

我不确定你想要达到什么目的,但他的作品对我而言:

var foo = new DerivedClass2();
var result = typeof(DerivedClass2).GetField("subItem", 
                                            BindingFlags.NonPublic | 
                                            BindingFlags.Instance)
                                  .GetValue(foo);
var genericClassField = result as GenericClass<DerivedClass1>;

genericClassField的类型为GenericClass<DerivedClass1> - 当然,在执行此操作之前,您必须为其指定一个值,否则结果将为null,为此我向您的{{添加了一个构造函数1}}就是这样:

DerivedClass2

修改

要在运行时找出class DerivedClass2 : BaseClass { GenericClass<DerivedClass1> subItem; public DerivedClass2() { subItem = new GenericClass<DerivedClass1>(); } } 的类型,您可以执行以下操作:

result

在示例中,这将返回类型var foo = new DerivedClass2(); var result = typeof(DerivedClass2).GetField("subItem", BindingFlags.NonPublic | BindingFlags.Instance) .GetValue(foo); Type myType = result.GetType().GetGenericArguments()[0]; 。另外我认为msdn article可能是相关的。