基本上,我有:
public class Gen<T, U> { }
我想通过该类的反射创建泛型类型。我尝试了下面的内容,都产生了空值:
var asm = typeof(Program).Assembly;
var gen1 = asm.GetType("Gen`2"); // null
var gen2 = asm.GetType("Gen<>"); // null
var gen3 = asm.GetType("Gen"); // null
这并没有编译:
var t = typeof(Gen<>).MakeGenericType(typeof(int), typeof(string));
我怎样才能实现我想要的目标?为什么没有编译最后一个语句?怎么样的&#34; Gen`2&#34;不应该这样做吗?
答案 0 :(得分:10)
正确的语法是:
var t = typeof(Gen<,>).MakeGenericType(typeof(int), typeof(string));
(请注意<
和>
之间的逗号)
要通过反射获取Gen<T, U>
类,必须指定该类型的全名,包括命名空间:
var gen = asm.GetType("TheNamespace.Gen`2");
如果Gen<T, U>
类是嵌套的,则必须将其名称与其封闭类型名称分隔为+
:
var gen = asm.GetType("TheNamespace.EnclosingType+Gen`2");