0

MSDN 说:

编译器还可以为您构建表达式树。编译器生成的表达式树始终植根于 Expression<TDelegate> 类型的节点;也就是说,它的根节点代表一个 lambda 表达式。

但是,如果我想构建一个以 MethodCallExpression、BinaryExpression 等类型的节点为根的表达式树呢?并且不想手动执行此操作。

4

1 回答 1

1

解决方法是声明 2 个辅助函数

public Expression GetBody(Expression<Action> lambda)
{
    return lambda.Body;
}

public Expression GetBody<TResult>(Expression<Func<TResult>> lambda)
{
    return lambda.Body;
}

使用示例:

var e1 = (MethodCallExpression)GetBody(() => this.FunA());
var e2 = (ConstantExpression)GetBody(() => 4 + 5);
var e3 = (BinaryExpression)GetBody(() => a + b);
于 2009-09-15T14:06:51.217 回答