我怎样才能模仿" typeof(T)"使用System.Linq.Expressions API?

时间:2016-08-09 23:25:10

标签: c# metaprogramming expression-trees cil

我尝试创建一个方法,使用DataTable API从对象列表中创建System.Linq.Expressions,但我无法弄清楚如何生成以下内容我在反编译表达式typeof (int)时得到的IL。

IL_0000:  nop         
IL_0001:  ldtoken     System.Int32
IL_0006:  call        System.Type.GetTypeFromHandle
IL_000B:  call        LINQPad.Extensions.Dump<Object>
IL_0010:  pop         
IL_0011:  ret

目前我试图通过调用Type.GetType("System.Int")来解决问题,但我想尽可能为typeof (int)生成代码。

1 个答案:

答案 0 :(得分:7)

只需使用Expression.Constant并传递typeof(int)作为值:

var expression = Expression.Constant(typeof(int), typeof(Type));

无论如何,当你在lambda表达式中使用typeof时会发生什么:

Expression<Func<Type>> func = () => typeof(T);
相关问题