У меня есть общий тип 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
?