如何使用System.Linq.Expressions API模拟"typeof(T)"?

Kyl*_*ten 3 c# cil metaprogramming expression-trees

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

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
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 7

只需使用Expression.Constant并传入typeof(int)值:

var expression = Expression.Constant(typeof(int), typeof(Type));
Run Code Online (Sandbox Code Playgroud)

typeof无论如何,当你在lambda表达式中使用时会发生这种情况:

Expression<Func<Type>> func = () => typeof(T);
Run Code Online (Sandbox Code Playgroud)