通过反射创建两个以上参数的泛型类型?

时间:2014-05-20 07:42:56

标签: c# generics reflection types

基本上,我有:

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;不应该这样做吗?

1 个答案:

答案 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");