是否可以使用动态类型参数创建泛型类的对象?

时间:2015-08-09 12:13:25

标签: c# generics reflection

说,我们有一个像这样的泛型类:

public sealed class Class1<T>
{
    private T _value;
    public T Value
    {
        get { return _value; }
    }
}

我想发起类型为Class1的对象,但类型参数T仅可使用GetType()动态提供。可以使用动态类型的泛型类,如下所示吗?

Class1<anObject.GetType()> obj = new Class1<anObject.GetType()>();

我知道这段代码甚至无法编译,但我需要这样的通用用法。 根据{{​​3}}我应该使用MakeGenericType使用反射推断T参数并创建对象,如下所示:

Type typeArgument = anObject.GetType();
Type genericClass = typeof(Class1<>);
Type constructedClass = genericClass.MakeGenericType(typeArgument);
object created = Activator.CreateInstance(constructedClass);

但我以后不知道如何使用创建的对象!因为这是一个隐式对象,并且无法访问其属性Value。我也无法将其投放到Class1,如果我可以,我最初不必使用MakeGenericType!在创建对象后如何访问Value?

0 个答案:

没有答案