掌握表达式树计划

检测设备2021年09月06日

对于熟悉函数式编程语言的开发者而言,可能不需要再解释为什么说“表达式树(即Expression Tree)是非常有用的”,但对其他人来讲,表达式树则是C# 3.0或VB 9.0的所有新特性中最引人注目的一个概念。  Charlie Calvert讲解了表达式树的基础,他从语法描述开始,并以同Visual Studio 2008一起发行的示例程序——ExpressionTressVisualizer为例,形象地展示了如何使用表达式树。

表达式树与Lambda表达式相关联,Lambda表达式是可在行内实现预期代理和匿名代理的内容的一种方式。Ian Griffiths在他关于表达式树文章中,给出了一个非常不错的Lambda表达式介绍,以及Lambda与表达式树的关系。正如Ian所指出的,“Lambda除了语法不同以外,并没有比我已掌握的匿名方法提供更多的东西,但是,它却使一些匿名方法无法实现的事情变成了可能。”   FuncnonExprLambda=x=(x1)==0;ExpressionexprLambda=x=(x1)==0;

[...]  第二行更有趣,它变成Func的代理,将Func作为一种名为Expression的泛型的类型参数,然后按照相同的方式进行初始化,因此,你可能会认为两者是在完成同样的事情,但是,它却能让编译器知道了Expression类型,这就导致了不一样的行为;前者会直接将Lambda表达式编译为IL,而后者则是通过对表达式进行评估后,生成一个可以创建并代表此表达式的对象树的IL。

Charlie仔细钻研了Expression的细节:

Expression类共有四个属性:

Body:获取表达式的主体;

Parameters:获取Lambda表达示的参数;

本文地址: NodeType:得到树中某些节点的表达式类型(ExpressionType),这是一个有45种不同值的枚举类型,代表表达式节点的所有可能类型,如返回常数、也可能返回参数、或者返回一个值是否小于另外一个(),或者返回一个值是否大于另外一个(),或者返回两个值的和(+)等等;

Type:得到表达式的静态类型,在本例中,表达式的类型是Func。

在C# 3.0和VB 9.0大部分新特性中,表达式树在“LINQ,尤其是LINQ to SQL”中扮演了一个非常重要的角色:   varquery=ty==\"Nantes\"selectnew{ty,panyName};  LINQ表达式会返回一个IQueryable类型的值,IQueryable值包含有一个表达式树,由它来代表这个LINQ查询。当创建这个查询时,SQL语句并没有被发送到数据库中,只有当你在代码中对这个IQueryable对象进行Iterate操作时,这个SQL语句才会被创建并执行,这个概念就是延迟执行。

Charlie Calvert对这种方法的使用进行了说明:

因为查询是以一种高度抽象的数据结构封装后传送给编译器的,所以,编译器可以以它期望的任一方式自由地进行翻译。查询的执行次序和途径并非强制指定的,相反,它可以对表达树进行分析,以发现你所期望的结果,然后再决定如何处理;至少在理论上,它可以独立地考虑很多因素,诸如当前的络流量、数据库的负载、它当前已有的可用结果集等等;虽然在LINQ to SQL中,它实际上并没有去考虑所有这些因素,但在理论上它可以考虑更多它关心的因素;此外,它还可以对表达式树进行分析,并将LINQ to SQL的输出结果转换成截然不同的形式,然后传递给你手写的自定义代码。

Marlon Grech展示了如何应用表达式树,以及如何创建表达式解析器。Octavio Hernández提供了一个表达式树的表达式类层次汇总表。

江中健胃消食片
玉林白癜风好医院
哈尔滨医院哪家白癜风医院好
相关阅读
恭喜!千万粉丝网红“小刚学长”当爸,亲自帮妻子按摩不必要血栓

对于身为百万粉丝网成员的小马上,同窗来说,五四绝对是一个值得庆祝的往...

2024-09-05
职场情商课:掌控“现像效应”,发挥积极作用,遵从自己的内心

本文看点:惯常effect是心理学之外的专业术语,又指乐队烟火effect,又叫“随...

2024-07-27
热门 抱怨是最浪费力气且没用的事情。 内心强大,是抗击一切痛苦的前提。 活着比什么都重要,活在当下。

热门 抱怨是最浪费力气且就让的事情。 内心强盛,是抵御一切病痛的前提。...

2024-06-29
公职考试也看“家庭背景”,这3类人很有优势,考上机会很大!

公详的垄断压力却是是一年比一年大,每年省详、国详都是几十上百万人报上...

2024-06-23
【手慢无】Plus会员专享47元 京东自营帅气竞走雨衣

2022-06-23 09:18:04 所作:张军 随着夏末暴雨的预示,打工人出门需要更高的随...

2024-05-05
你曾经羡慕的人,在起初都貌似完美无缺

你以前喜欢的人,在先前都貌似完美无缺。即便当他逐渐四分五裂转化成一堆...

2024-02-23
友情链接