【发布时间】:2014-04-12 15:22:16
【问题描述】:
我得到了以下信息:
Expression<Func<double, double, double>> XTCylinderVolume =
(r, h) => 3.14 * r * r * h;
Expression<Func<double, double>> cubed = (V) => V * V * V ;
我可以将它们组合起来构建一个复合函数,称为fgCompiled。
var cubedC = cubed.Compile();
Func<double, double, double> fgComplied = (r, h) => cubedC(XTCylinderVolume.Compile()(r, h));
fgCompiled(2,1)
//answer = 1981.385..;
如何获得未编译的表达式 fg,以便 fg.ToString() 看起来像
=> (3.14 * r * r * h ) * ( 3.14 * r * r * h ) * (3.14 * r * r * h)
或者希望更整洁,但这将是一个开始。
有没有办法将编译后的函数反编译回表达式?
【问题讨论】:
-
@Hammerstein 不会产生 OP 想要的结果。事实上,OP 要求的结果不包括 Func。
-
有两个问题,可读版本以及如何将反编译的函数返回为表达式。我只是想帮助其中一个。
-
@Hammerstein OP 已经有表达式。
-
你不想使用
Expression.Compile。您想使用ExpressionVisitor将ExpressionParameter替换为另一个Expression<Func>.Body的主体,然后您想将其全部放入新的Expression.Lambda
标签: c# lambda tree expression composite