|
6
|
| chillitom Cee McSharpface · 技术社区 · 16 年前 |
|
|
1
4
不幸的是,在.NET 3.5中,不能构建执行一系列任意操作的表达式。以下是支持的表达式列表:
.NET 4通过添加以下表达式扩展了此API:
这个 Block 表情特别有趣。 |
|
|
2
1
你可以,但这不是一件小事。 当您有一个expression类型的变量时,您可以检查它的body属性以查找表达式的数据结构。 您不能要求编译器为您编译它,因为它不会得到您想要的结果。您必须解析所有表达式的主体,并以某种方式将它们组合成一个单独的方法,所有方法都是同时发出IL(或者,通过生成C并在您认为IL太远时编译它)。 正如LinqToSQL将表达式编译为SQL查询一样,您也可以将表达式编译为所需的任何内容。你将有很多工作要做,但是你只需要实现你想要支持的东西。 在这个非常小的例子中,我认为没有必要创建自己的LINQ提供者。你只需处理传递的表达式,然后从那里开始。但我怀疑你的申请比这要复杂一点。 |
|
3
1
在4.0中,由于支持树中的块操作(尽管不在C表达式编译器中),这要容易得多。
然而,你可以利用这个事实
当然可以
可能的
检查树木并手动发出IL(
|
|
|
4
0
您只能在.NET 4中执行此操作。对不起,不知道细节。 编辑: 如果您对reflection.emit感到满意,则可以发出一个方法,按顺序调用这些表达式。 另一种选择: 创建“do”方法,即:
|
|
5
0
查看此问题的另一种方法是记住委托是多播的;您可以将
|