У меня есть общий тип Store
и я использую 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
, которые, как я знаю, находятся в объекте x
?