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

How can I emulate "typeof (T)" using the System.Linq.Expressions API?

我正在尝试创建一种方法,该方法将使用 System.Linq.Expressions API 从对象列表中创建 DataTable,但我不知道如何生成反编译表达式 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) 生成代码。

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

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

无论如何,这就是在 lambda 表达式中使用 typeof 时发生的情况:

Expression<Func<Type>> func = () => typeof(T);