如何:执行表达式树(C# 和 Visual Basic)

本主题演示如何执行表达式树。 执行表达式树可能会返回一个值,也可能仅执行一个操作(例如调用方法)。

只能执行表示 lambda 表达式的表达式树。 表示 lambda 表达式的表达式树属于 LambdaExpressionExpression<TDelegate> 类型。 若要执行这些表达式树,需要调用 Compile 方法来创建一个可执行委托,然后调用该委托。

提示

如果委托的类型未知,也就是说,lambda 表达式属于 LambdaExpression 类型,而不是属于 Expression<TDelegate> 类型,则必须对该委托调用 DynamicInvoke 方法,而不是直接调用该委托。

如果表达式树不表示一个 lambda 表达式,则可以通过调用 Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) 方法,创建一个以原始表达式树作为其主体的新 lambda 表达式。 然后,即可按照本节前面所述执行该 lambda 表达式。

示例

下面的代码示例演示如何通过创建一个 lambda 表达式并执行它,来执行表示对某个数字进行幂运算的表达式树。 然后显示结果,即幂运算后的数字。

        ' The expression tree to execute.
        Dim be As BinaryExpression = Expression.Power(Expression.Constant(2.0R), Expression.Constant(3.0R))

        ' Create a lambda expression.
        Dim le As Expression(Of Func(Of Double)) = Expression.Lambda(Of Func(Of Double))(be)

        ' Compile the lambda expression.
        Dim compiledExpression As Func(Of Double) = le.Compile()

        ' Execute the lambda expression.
        Dim result As Double = compiledExpression()

        ' Display the result.
        MsgBox(result)

        ' This code produces the following output:
        ' 8

            // The expression tree to execute.
            BinaryExpression be = Expression.Power(Expression.Constant(2D), Expression.Constant(3D));

            // Create a lambda expression.
            Expression<Func<double>> le = Expression.Lambda<Func<double>>(be);

            // Compile the lambda expression.
            Func<double> compiledExpression = le.Compile();

            // Execute the lambda expression.
            double result = compiledExpression();

            // Display the result.
            Console.WriteLine(result);

            // This code produces the following output:
            // 8

编译代码

  • 添加对 System.Core.dll 的项目引用(如果尚未引用它的话)。

  • 包括 System.Linq.Expressions 命名空间。

请参见

任务

如何:修改表达式树(C# 和 Visual Basic)

概念

表达式树(C# 和 Visual Basic)