Попробуйте это:
class Foo<T> { }
class Bar<T> { }
Type unboundBar = typeof(Bar<>);
Type unboundFoo = typeof(Foo<>);
Type boundFoo = unboundFoo.MakeGenericType(new[] { unboundBar });
Console.WriteLine(boundFoo.Name);
Conosle.WriteLine(boundFoo.GetGenericArguments().First().Name);
Обратите внимание, что вы не можете написать
Type boundFoo = typeof(Foo<Bar<>>)
потому что в спецификации явно указано:
Несвязанный универсальный тип может использоваться только внутри typeof-выражения (§7.6.11).
(Bar<>
не используется в качестве параметра для typeof-выражения здесь, скорее, это параметр общего типа для параметра для typeof-выражения .)
Однако в рамках CLR это совершенно законно, как показано выше с использованием отражения.
Но что вы пытаетесь сделать? Вы не можете иметь экземпляры несвязанных типов, поэтому я не понимаю.