Мне нужно использовать универсальный интерфейс, например:
public interface IContainer<T>
{
IEnumerable<IContent<T>> Contents { get; }
}
Объект, реализующий этот интерфейс, возвращается универсальным методом, подобным следующему:
IContainer<T> GetContainer<T>(IProperty property);
Тип T
неизвестно до времени выполнения.
Используя отражение, я могу вызвать метод GetContainer<T>
и получить результат.
Моя проблема в том, что я не знаю, как перечислить результат, имеющий тип Object
(поэтому я не могу привести его к IEnumerable
).
Я также пробовал приводить какследует, но не работает (он говорит: «Ожидается тип»):
var myContainer = genericMethodInfo.Invoke(
myService,
new object[] { property })
as typeof(IContainer<>).MakeGenericType(type);
, где type
- тип времени выполнения, myService
- служба, предоставляющая метод GetContainer<T>
, и property
имеет тип IProperty
по мере необходимости.
ОБНОВЛЕНИЕ : см. Мое полное решение в моем блоге: http://stefanoricciardi.com/2010/02/18/generics-with-type-uknown-at-compile-time/