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

标签 c# metaprogramming expression-trees cil

我正在尝试创建一个方法,该方法将使用 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);

关于c# - 如何使用 System.Linq.Expressions API 模拟 "typeof (T)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38861961/

相关文章:

c# - 打开PDF文件中的特定页面c#

c# - ASP.Net MVC 如何在 ApplicationUser 和我自己的类之间创建一对多关系?

java - 从其泛型类型参数派生的泛型类

grails - Groovy元编程

c# - 表达式.条件 : Argument types do not match

c# - 如何在 Open XML SDK for Excel 中按名称获取工作表

c# - 不同表同同

Grails - 在任何 Controller 中都可用的写入方法

c# - 如何使用反射简化 Linq 扩展方法调用?

c# - 使用 Expression 类将字符串设置为 int 常量