声明性地构建以任何类型的节点为根的表达式树

时间:2009-09-15 14:06:09

标签: lambda expression-trees

MSDN说:

  

编译器也可以构建一个   表达树给你。一个   编译器生成的表达式树是   总是植根于类型的节点   表达式来; TDelegate取代;就是它   根节点代表一个lambda   表达

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

1 个答案:

答案 0 :(得分: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);