Есть ли способ создать вложенный открытый универсальный тип?

В C# легко создать открытый универсальный тип, typeof(IEnumerable<>), Есть ли способ создать тип, который содержит открытый универсальный? Следующее не работает: typeof(IEnumerable<IFoo<>>),

2 ответа

Решение

Получите два связанных несвязанных универсальных типа, а затем используйте один в качестве аргумента для создания универсального типа из другого:

typeof(IEnumerable<>).MakeGenericType(typeof(IFoo<>))

Нет выбора. Это не общие, а несвязанные типы, это специальные типы, которые не могут быть созданы. Несвязанный универсальный тип может использоваться только в прямом выражении typeof.

Когда вы используете typeof(IEnumerable<IFoo<>>) вы используете не несвязанный тип в выражении typeof, а в IEnumerable<T> выражение.

Другие вопросы по тегам