我有一个泛型类型Store<T>
并用于Activator
制作这种类型的实例。现在,在使用 Activator 之后,如何将结果类型的对象object
转换回实例化类型?我知道我用来实例化泛型的类型。请看以下代码:
class Store<T> where T : IStorable
{}
class Beer : IStorable
{}
class BeerStore : Store<Beer>
{}
Type storeType = someObjectThatImplementsIStorable.GetType();
Type classType = typeof(Store<>);
Type[] typeParams = new Type[] { storeType };
Type constructedType = classType.MakeGenericType(typeParams);
object x = Activator.CreateInstance(constructedType, new object[] { someParameter });
我想做的是这样的:
var store = (Store<typeof(objectThatImplementsIStorable)>)x;
但由于明显的原因,这不起作用。作为替代方案,我尝试了:
var store = (Store<IStorable>)x;
在我看来,这可能会起作用,但会给出InvalidCastException
.
如何再次访问Store<T>
我知道对象中的方法x
?