vex*_*exe 0 c# generics reflection types
基本上,我有:
public class Gen<T, U> { }
Run Code Online (Sandbox Code Playgroud)
我想通过该类的反射创建一个泛型类型.我尝试了以下,都产生了空值:
var asm = typeof(Program).Assembly;
var gen1 = asm.GetType("Gen`2"); // null
var gen2 = asm.GetType("Gen<>"); // null
var gen3 = asm.GetType("Gen"); // null
Run Code Online (Sandbox Code Playgroud)
这没有编译:
var t = typeof(Gen<>).MakeGenericType(typeof(int), typeof(string));
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现我的目标?为什么最后一个语句没有编译?那么"Gen`2"应该不会起作用吗?
Tho*_*que 10
正确的语法是这样的:
var t = typeof(Gen<,>).MakeGenericType(typeof(int), typeof(string));
Run Code Online (Sandbox Code Playgroud)
(注意之间的逗号<和>)
要Gen<T, U>通过反射获取类,必须指定类型的全名,包括命名空间:
var gen = asm.GetType("TheNamespace.Gen`2");
Run Code Online (Sandbox Code Playgroud)
如果Gen<T, U>该类是嵌套的,则必须将其名称与其封闭类型名称分开+:
var gen = asm.GetType("TheNamespace.EnclosingType+Gen`2");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |