C#中的表达式树的浅解
2021-05-14 05:28
标签:ons com var class 结果 prot return 数据 debuginfo 表达式树可以说是Linq的核心之一,为什么是Linq的核心之一呢?因为表达式树使得c#不再是仅仅能编译成IL,我们可以通过c#生成一个表达式树,将结果作为一个中间格式,在将其转换成目标平台上的本机语言。比如SQL。我们常用的Linq to sql就是这样生成SQL的。 表达式树是.NET 3.5之后引入的,它是一个强大灵活的工具(比如用在LINQ中构造动态查询)。 先来看看Expression类的API接口: 表达式树的语法如下: 例如: 我们运行以上代码,并在VS调试模似下查看这个表达式树: 可以看到表达式树主要由下面四部分组成: 1、Body 主体部分 2、Parameters 参数部分 3、NodeType 节点类型 4、Lambda表达式类型 在上述代码中,主体即为:x+y,参数为(x,y),NodeType为Lambda表达式,返回值为int 主体部分可以是表达式,但是不能包含语句。例如:我定义一个委托,Lambda表达式可以这样写 也可以这样写: 但是,在表达式树种,只能用第一种写法,如果使用第二种写法编译汇报错误:无法将具有语句体的 lambda 表达式转换为表达式树。 除了上边的写法,表达式树还有可以这么写: VS调试模式下可以看到两种写法生成的表达式树是一样的 将表达式树编译成委托 LambdaExpression是从Expression派生的类型。泛型类Expression LambdaExpression有个Compile方法能创建恰当类型的一个委托。而Expression 我们运行上面代码,结果为:4。我们写了一大堆代码,本质上就是用表达式树计算了1+3的结果。 C#中的表达式树的浅解 标签:ons com var class 结果 prot return 数据 debuginfo 原文地址:http://www.cnblogs.com/ldyblogs/p/Expression.htmlnamespace System.Linq.Expressions
{
//
// 摘要:
// 以表达式目录树的形式将强类型 lambda 表达式表示为数据结构。此类不能被继承。
//
// 类型参数:
// TDelegate:
// System.Linq.Expressions.Expression`1 表示的委托的类型。
public sealed class Expression
Expression
Expression
Funcint, int, int> func = (x, y) => x + y;
Funcint, int, int> func = (x, y) => { return x + y; };
ParameterExpression pex1 = Expression.Parameter(typeof(int), "x");//第一个参数
ParameterExpression pex2 = Expression.Parameter(typeof(int), "y");//第二个参数
BinaryExpression bexp = Expression.Add(pex1, pex2);//加法
var lambdaExp = Expression.Lambda
Expression
下一篇:C# 富文本的使用