之前的问题问过是否可以将编译委托(delegate)变成表达式树,例如:
当时理智的回答是:
- 这是可能的,但非常困难,而且没有标准库解决方案。
- 使用反射器!
但幸运的是,那里有一些非常疯狂/非常伟大的人,他们喜欢逆向工程,他们使我们其他人的困难变得容易。
很明显,可以将 IL 反编译为 C#,就像 Reflector 那样,因此您可以原则上改为以支持所有语句类型的 CLR 4.0 表达式树为目标。这很有趣,因为编译器是否内置对 Expression<>
的特殊支持并不重要。 lambdas 从未扩展为支持在编译器中构建语句表达式树。图书馆解决方案可以填补空白。然后,我们将有一个高级起点来编写类似方面的代码操作,而不必弄乱原始 IL。
如上述链接问题的答案所述,there are some promising signs但我还没有成功地通过搜索找到是否有很大的进展。
那么有没有人完成这项工作,或者做得很好?
注意:CLR 4.0 现已发布。是时候再看看了。
最佳答案
我做了一个支持 .NET 3.5 表达式树的库:
https://github.com/ashmind/expressive
我尝试做内部 API,这样 .NET 4.0 支持就不会那么难添加。
您可以在 IPipeline 实现中添加或更改步骤来实现这一点。
不过,有一件事我还没有完成并且很难完成,那就是对循环的支持。
关于c# - 是否有可以将方法反编译为表达式树并支持 CLR 4.0 的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305988/