【问题标题】:Declaratively build expression-tree rooted in a node of any type以声明方式构建以任何类型节点为根的表达式树
【发布时间】:2009-09-15 14:06:09
【问题描述】:

MSDN 说:

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

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

【问题讨论】:

    标签: lambda expression-trees


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多