我有一个带有某个Lambda的Expression,看起来像这样:
Expression<Func<string[],int>> expression = p => int.Parse(p[0]) * int.Parse(p[1])
当我打电话给表情。身体,我得到:
(Parse(p[0]) * Parse(p[1]))
如果表达式是这样的:
Expression<Func<string[],int>> expression = p => p[0].ToInt() * p[1]ToInt()
当然,表达式会从静态方法中切断类,并使用它做一些事情。
我的问题是,如何获得排除类的字符串表示?
它在哪里存储静态方法?我可以string.Format()
获得完整身体的属性吗?
P.S。我不需要运行表达式,我知道当我打电话给expression.Invoke
时它会起作用。因为我使用CodeDom,所以我需要精确的表达体
答案 0 :(得分:1)
Expression.ToString()
会实例化一个ExpressionStringBuilder
,遗憾的是internal sealed
,因此您无法为此做很多事情。
您可以尝试以下解决方法:
ExpressionVisitor
StringBuilder
VisitMethodCall
以实现您的逻辑并将字符串附加到StringBuilder
。使用MethodInfo.DeclaringType
访问方法的类型。node.ToString()
附加到StringBuilder
(重复使用现有功能)。