У меня есть универсальный тип Store<T>
, и я использую 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
?