Есть ли способ создать вложенный открытый универсальный тип?
В C# легко создать открытый универсальный тип, typeof(IEnumerable<>)
, Есть ли способ создать тип, который содержит открытый универсальный? Следующее не работает: typeof(IEnumerable<IFoo<>>)
,
2 ответа
Решение
Получите два связанных несвязанных универсальных типа, а затем используйте один в качестве аргумента для создания универсального типа из другого:
typeof(IEnumerable<>).MakeGenericType(typeof(IFoo<>))
Нет выбора. Это не общие, а несвязанные типы, это специальные типы, которые не могут быть созданы. Несвязанный универсальный тип может использоваться только в прямом выражении typeof.
Когда вы используете typeof(IEnumerable<IFoo<>>)
вы используете не несвязанный тип в выражении typeof, а в IEnumerable<T>
выражение.