前面的问题询问是否可以将编译的委托转换为表达式树,例如:
- 将 .net Func 转换为 .net Expression>
当时理智的答案是:
- 这是可能的,但非常困难,而且没有标准库解决方案。
- 使用反光镜!
但幸运的是,有一些非常疯狂/非常伟大的人喜欢逆向工程,他们让我们其他人的困难事情变得容易。
显然,可以将 IL 反编译为 C#,就像 Reflector 所做的那样,因此您可以原则相反,目标是支持所有语句类型的 CLR 4.0 表达式树。这很有趣,因为编译器是否内置特殊支持并不重要Expression<>
lambda 从未扩展为支持在编译器中构建语句表达式树。图书馆解决方案可以填补这一空白。然后,我们将有一个高级起点来编写类似方面的代码操作,而不必弄乱原始 IL。
正如上述链接问题的答案中所指出的,有一些有希望的迹象但我还没有成功地通过搜索发现是否有很大进展。
那么有人完成了这项工作,或者已经取得了很大的进展吗?
Note:CLR 4.0 现已发布。是时候再看一看了。
我做了一个支持 .NET 3.5 表达式树的库:
https://github.com/ashmind/expressive
我尝试做内部 API,这样添加 .NET 4.0 支持就不那么困难了。
您可以添加或更改 IPipeline 实现中的步骤来实现这一目标。
不过,我还没有做过而且很难的一件事是对循环的支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)