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