通过反射创建两个以上参数的泛型类型
本文关键字:两个 参数 泛型类型 反射 创建 | 更新日期: 2023-09-27 18:04:06
基本上,我有:
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));
我怎样才能达到我想要的?为什么最后一条语句没有编译?那"第二代"呢,难道这就不行吗?
正确的语法是:
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");