繁体   English   中英

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

[英]Create a generic type of more than two arguments via reflection?

基本上,我有:

public class Gen<T, U> { }

我想通过该类的反射创建一个通用类型。 我尝试了以下操作,都产生了null:

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));

我怎样才能实现自己想要的? 为什么最后一条语句没有编译? 那“ Gen`2”怎么办不就可以了吗?

正确的语法是这样的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM