【发布时间】:2013-11-22 21:36:59
【问题描述】:
我遇到了一个奇怪的要求:
有一个api列表,每个api我都要写一个例子,这个例子必须呈现给用户,所以它提醒我“表达式树”,方法可以存储和执行。
但问题是,方法会被编译...
当我调试表达式时,我得到了 IL 代码。
我需要的是:
Func<HttpResponseMessage> func = () =>
{
// do something and call api
// ...
// return the response from api
}
Expression<Func<HttpResponseMessage> expression = SomeMethod(func);
Console.WriteLine(expression.ToString()); // get the func body(NOT COMPILED)
expression.Body.Compile().Invoke(); // compile expression and invoke the func.
这是一个解决方案,但它基于 MONO。
http://evain.net/blog/articles/2009/04/22/converting-delegates-to-expression-trees/
【问题讨论】:
-
你已经有了响应,只需要从
Func返回它? -
@bump no,在 func 中调用 api :D
-
"这是一个解决方案,但它基于 MONO。" - 这不应该阻止它对你正常工作。 Mono Cecil 也可以与微软自己的 .NET Framework 一起使用。
-
@hvd 单声道代码指的是单声道框架中的许多类。 :(
-
你可以try这个...我不知道它处理了多少:nuget.org/packages/DelegateDecompiler - 但从好的方面来说,它可以直接从 NuGet 上运行。网;用法示例:github.com/hazzik/DelegateDecompiler
标签: c# converter expression-trees anonymous-function