以前的问题询问是否可以将已编译的委托转换为表达式树,例如:
当时理智的答案是:
但幸运的是,有一些非常疯狂/疯狂的伟大的人喜欢逆向工程,他们让我们其他人都很容易做到困难。
显然,可以将IL反编译为C#,因为Reflector会这样做,因此您可以原则上而不是以支持所有语句类型为目标的CLR 4.0表达式树。这很有意思,因为编译器对Expression<>
lambdas的内置特殊支持永远不会扩展为支持编译器中的构建语句表达式树并不重要。图书馆解决方案可填补这一空白。然后,我们将有一个高级别的起点,用于编写类似方面的代码操作,而不必混淆原始IL。
如上述相关问题的答案there are some promising signs所述,但我没有成功地找到自搜索以来是否取得了很大进展。
所有人都完成了这项工作,还是走得很远?
注意: CLR 4.0现已发布。再看看的时间 - 见。
答案 0 :(得分:3)
我做了一个支持.NET 3.5表达式树的库:
https://github.com/ashmind/expressive
我尝试使用内部API,因此.NET 4.0支持不会很难添加 您可以在IPipeline实现中添加或更改步骤以实现此目的。
我还没有做过一件事情,那就是支持循环。
答案 1 :(得分:0)
根据回复,我将回答我的问题:
没有
虽然当然如果有人想出一个更好的答案(或者我遇到过一个),我会更新。