以前的问题已经问过,是否可以将已编译的委托转换为表达式树,例如:
当时理智的回答是:
但幸运的是,有一些非常--疯狂/疯狂--伟大的人喜欢逆向工程,他们让困难的事情对我们其他人来说很容易。
显然,可以像Reflector那样将IL解压缩到C#,因此原则上可以用支持所有语句类型的CLR4.0表达式树作为目标。这很有趣,因为编译器对Expression<> lambda的内置特殊支持从未扩展到支持在编译器中构建语句表达式树,这并不重要。图书馆的解决方案可以填补这一空白。然后,我们将有一个高级别的起点来编写类似方面的代码操作,而不必处理原始IL。
正如上面链接的问题的答案所指出的,有一些有希望的迹象但是我还没有通过搜索找到是否有很大的进展。
那么,有没有人完成了这项工作,或者说已经做得很好了?
注释:CLR4.0现已发布。是时候再看一看了-看。
发布于 2010-07-12 15:53:44
根据答复,我将回答我的问题:
不是的。
当然,如果有人想出了一个更好的答案(或者我遇到了一个),我会更新。
发布于 2011-06-01 19:10:39
我做了一个支持.NET 3.5表达式树的库:
https://github.com/ashmind/expressive
我尝试做内部API,这样.NET 4.0的支持就不会那么难添加了。
您可以在IPipeline实现中添加或更改步骤,以实现这一点。
不过,我还没有做过的一件事是支持循环,这是很困难的。
https://stackoverflow.com/questions/2305988
复制相似问题