.NET Framework C#编译器生成的简单表达式树
示例
考虑以下C#代码
Expression<Func<int, int>> expression = a => a + 1;
因为C#编译器认为lambda表达式被分配给Expression类型而不是委托类型,所以它生成的表达式树与该代码大致等效
ParameterExpression parameterA = Expression.Parameter(typeof(int), "a");
var expression = (Expression<Func<int, int>>)Expression.Lambda(
Expression.Add(
parameterA,
Expression.Constant(1)),
parameterA);树的根是lambda表达式,其中包含主体和参数列表。lambda具有1称为“a”的参数。该主体是CLR类型BinaryExpression和NodeTypeofAdd的单个表达式。此表达式表示加法。它有两个子表达式,分别表示为Left和Right。左侧是参数“a”的ParameterExpression,右侧是值为1的ConstantExpression。
该表达式最简单的用法是打印它:
Console.WriteLine(expression); //prints a => (a + 1)
打印等效的C#代码。
表达式树可以编译为C#委托并由CLR执行
Func<int, int> lambda = expression.Compile(); Console.WriteLine(lambda(2)); //版画3
通常,表达式可以翻译成其他语言,例如SQL,但也可以用来调用公共或非公共类型的私有成员,受保护成员和内部成员,以替代反射。
热门推荐
10 赠礼贺卡祝福语简短英文
11 女儿结婚账单祝福语简短
12 友谊晚上祝福语大全简短
13 带清的简短祝福语
14 男朋友新年祝福语简短
15 回家长的祝福语简短
16 孩子16岁祝福语简短
17 下雪宝宝生日祝福语简短
18 送女士祝福语长辈简短