本主题演示如何执行表达式树。 执行表达式树可能返回一个值,或者它可能只是执行操作,例如调用方法。
仅可以执行表示 lambda
表达式的表达式树。 表示 Lambda
表达式的表达式树的类型为 System.Linq.Expressions.LambdaExpression
或 System.Linq.Expressions.Expression
。 若要执行这些表达式树,请调用 System.Linq.Expressions.LambdaExpression.Compile
方法来创建一个可执行的委托,然后调用该委托。
如果委托的类型未知,也就是说
Lambda
表达式的类型为System.Linq.Expressions.LambdaExpression
,而不是System.Linq.Expressions.Expression
,则必须对委托调用System.Delegate.DynamicInvoke
方法,而不是直接调用委托。
如果表达式树不表示 Lambda
表达式,可以通过调用 Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>)
方法创建一个新的 Lambda
表达式,此表达式的主体为原始表达式树。 然后,按本节前面所述执行此 lambda
表达式。
示例
下面的代码示例演示如何通过创建 lambda
表达式并执行它来执行代表幂运算的表达式树。 示例最后显示幂运算的结果。
// 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.Linq.Expressions
命名空间。