表达式树(二)【如何执行表达式树 (C#)】

本主题演示如何执行表达式树。 执行表达式树可能返回一个值,或者它可能只是执行操作,例如调用方法。

仅可以执行表示 lambda 表达式的表达式树。 表示 Lambda 表达式的表达式树的类型为 System.Linq.Expressions.LambdaExpressionSystem.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 命名空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值