热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

表达式树摘录(1)

本文主要讲述ConstantExpression介绍表示具有常量值的表达式。ParameterExpression介绍表示命名的参数表达式。UnaryExpression介绍表示包

本文主要讲述
ConstantExpression介绍         表示具有常量值的表达式。
ParameterExpression介绍      表示命名的参数表达式。
UnaryExpression介绍              表示包含一元运算符的表达式。
BinaryExpression介绍             表示包含二元运算符的表达式。
NewExpression介绍                表示调用构造函数,实例化对象的表达式。
NewArrayExpression介绍       表示创建新数组并可能初始化该新数组的元素的表达式。
TypeBinaryExpression介绍     表示表达式和类型之间的操作。 

说明
       上面列出的各个子Expression均派生自Expression类,并继承了NodeType,Type属性,这些将不再在下文说明,并且各个子Expression的构造函数都是Internal的,这意味着我们不能通过new 某个Expression来获得它的实例,而必须通过Expreesion类提供的工厂方法来创建
ConstantExpression介绍
       该类封装了一个表示包含常量值的表达式,  使用
Constant 工厂方法可创建 ConstantExpression ,它的 NodeTypeConstant

主要属性
     Value       获取常量表达式的值,返回Object类型

工厂方法
      Constant(Object)                  创建一个设置为指定值的 ConstantExpression。
       Constant(Object,Type)         创建一个设置为指定值,并指定值的类型的 ConstantExpression。

示例
从API学习Expression笔记(2)——表达式 - itworktor - 程序员的天空 运行结果:

从API学习Expression笔记(2)——表达式 - itworktor - 程序员的天空

 
ParameterExpression介绍
           该类封装了表示命名参数的表达式,可以使用 Parameter工厂方法创建ParameterExpression,它的NodeType属性为 Parameter。

主要属性
    Name       获取参数名,返回String类型

工厂方法
   Parameter(Type,String)           创建一个具有指定名称和类型的参数的 ParameterExpression

示例

从API学习Expression笔记(2)——表达式 - itworktor - 程序员的天空

 运行结果:

从API学习Expression笔记(2)——表达式 - itworktor - 程序员的天空
UnaryExpression介绍
       该类主要封装了一个表示一元运算符的表达式数据结构。

主要属性
   IsLifted                   获取一个值, 该值指示表达式树节点是否表示对运算符的提升调用。
   IsLiftedToNull       获取一个值,该值指示表达式树节点是否表示对运算符(其返回类型提升为可以为null的类型)的提升调用。
   Method                  获取一元运算符的实现方法,返回 MethodInfo 类型 。
   Operand                获取一元运算符的操作数,返回 Expression 类型。

工厂方法和对应的节点类型
  工厂方法                    节点类型
  ArrayLength                 ArrayLength
  Convert                        Convert
  ConvertChecked         ConvertChecked
  Negate                         Negate
  NegateChecked           NegateChecked
  Not                               Not
  Quote                          Quote
 TypeAs                         TypeAs
  UnaryPlus                    UnaryPlus
 还可以通过MakeUnary方法创建以上任何一种节点类型的UnaryExpression。
示例
从API学习Expression Tree笔记(2)——表达式(1) - itworktor - 程序员的天空
结果
从API学习Expression Tree笔记(2)——表达式(1) - itworktor - 程序员的天空
 BinaryExpression介绍
      该类封装了表示二元运算符的表达式,并且提供了一些属性用于访问二元运算符的左操作数和右操作数,以及之间的转换函数,由于二元运算符应用的比较广泛,所以下面详细的介绍一下BinaryExpression。

主要属性
   Conversion      获取合并运算使用的类型转换函数。
   IsLifted             获取一个值,该值指示表达式树节点是否表示对运算符的提升调用。
   IsLiftedToNull  获取一个值,该值指示表达式树节点是否表示对运算符(其返回类型提升为可以为 null 的类型)的提升调用。 
   Left                  获取二元运算符的左操作数
   Method            获取二元运算的实现方法
   Right                获取二元运算的右操作数

什么是二元运算符?

        用来连接两个操作数的运算符就叫二元运算符&#xff0c;它包含&#xff08;&#43;、-、*、/、%、&、|、^、<<、>>、&#61;&#61;、!&#61;、>、<、>&#61; 或 <&#61;&#xff09;,由这些符号组成的表达式又叫“
二元运算符表达式“。如&#xff1a;相加运算符、相减运算符等等。
1 &#43;2;
a - b;
(k * 5) % 2
    实际上,Expression类中定义了一套与之对应的工厂方法来创建某种具体的二元运算符表达式&#xff0c;如&#xff1a;
&#43;                 Add  、      AddChecked
-                  Subtract  、SubtractChecked
*                  Multiply, MultiplyChecked
/                  Divide
%                Modulo
&#61;                 Equal
!&#61;                NotEqual
>                 GreaterThan
>&#61;               GreaterThanOrEqual 
<                 LessThan
<&#61;               LessThanOrEqual
&                 And  
&&               AndAlso
|                   Or
||                  OrElse
??               Coalesce
^                  ExclusiveOr
^                  Power
<<               LeftShift
>>               RightShift

工厂方法
        从文档上看BinaryExpression内并不包含任何方法&#xff0c;只是包含了少量几个只读的属性&#xff0c;所以直接通过BinaryExpression创建实例似乎是不可能的&#xff0c; 于是尝试从父类Expression类来创建&#xff0c;果然找到了如下一些方法&#xff1a;
从API学习Expression--二元表达式(BinaryExpression) - itworktor - 程序员的天空
   观察上面的方法发现每个参数都带有一个left 和 right的参数&#xff0c;它表示BinaryExpression表达式两边的操作数&#xff0c;并且每个参数的类型都是抽象Expression类型&#xff0c;此外可以使用MakeBinary 方法创建以上任意一种节点类型的BinaryExpression&#xff0c;主要通过指定ExpressionType枚举来创建

下面通过代码来实际应用一下&#xff1a;
从API学习Expression笔记(2)——表达式 - itworktor - 程序员的天空
 运行结果&#xff1a;
从API学习Expression笔记(2)——表达式 - itworktor - 程序员的天空
  
NewExpression介绍
      该类封装了表示创建一个对象的实例&#xff0c;并调用构造函数的表达式。 使用工厂方法New 来创建NewExpression, 节点类型为&#xff1a; New

主要属性
  Arguments             获取构造函数的参数 , 返回类型
ReadOnlyCollection
  Constructor           获取被调用的构造函数 , 返回类型 ConstructorInfo 
  Members                获取已使用构造函数参数进行初始化的成员, 返回类型
ReadOnlyCollection

工厂方法
New( ConstuctorInfo)                                                                                                  创建一个表示调用不带参数的指定构造函数的NewExpression
New(Type)                                                                                                                  
创建一个表示调用指定类型的无参构造函数的NewExpression
New(ConstructorInfo, IEnumerable)                                                    
创建一个表示调用带指定参数的指定构造函数的NewExpression
New(ConstructorInfo, Expression[])                                                                           
创建一个表示调用带指定参数的指定构造函数的NewExpression
New(ConstructorInfo, IEnumerable, IEnumerable)       同上, 
其中指定了访问构造函数初始化的字段的成员
New(ConstructorInfo, IEnumerable, MemberInfo[])                              同上,   将访问构造函数初始化字段的成员指定为数组

示例
  下面演示一些New工厂方法的应用.
从API学习Expression Tree笔记(2)——表达式&#xff08;1&#xff09; - itworktor - 程序员的天空 
结果 
 从API学习Expression Tree笔记(2)——表达式&#xff08;1&#xff09; - itworktor - 程序员的天空
 

NewArrayExpression介绍
      该类主要表示创建数组并可能初始化该数组的元素&#xff0c;主要通过工厂方法 NewArrayBounds、 或 NewArrayInit 创建NewArrayExpression。

主要属性
     Expressions      如果NodeType值为 NewArrayBounds,则获取数组的界限&#xff1b; 如果为 NewArrayInit, 则获取用来初始化数组的元素的值。
工厂方法
  NewArrayInit(Type, IEnumerable)                   创建一个表示一维数组并使用元素列表初始化该数组的 NewArrayExpression
  NewArrayInit(Type, Expression[] )                                          创建一个表示一维数组并使用元素列表初始化该数组的 NewArrayExpression
  NewArrayBounds(Type, IEnumerable         创建一个表示具有指定维的数组的 NewArrayExpression
  NewArrayBounds(Type, Expression [] )                                 创建一个表示具有指定维的数组的 NewArrayExpression

示例
   下面演示如何创建一个一维或多维数组的表达式
 从API学习Expression Tree笔记(2)——表达式&#xff08;1&#xff09; - itworktor - 程序员的天空 
结果
   从API学习Expression Tree笔记(2)——表达式&#xff08;1&#xff09; - itworktor - 程序员的天空 
 
TypeBinaryExpression介绍
      该类表示表达式和类型之间的操作&#xff0c;例如 类型测试就是表达式和类型之间的操作。 使用工厂方法 TypeIs 方法创建TypeBinaryExpression&#xff0c;节点类型 TypeIs.

主要属性
      Expression           获取类型测试操作的表达式操作数&#xff0c;返回Expression类型
      TypeOperand       获取类型测试操作的类型操作数&#xff0c;返回Type类型

工厂方法
      TypeIs(Expression, Type)        表示表达式和类型之间的操作   

示例
从API学习Expression Tree笔记(2)——表达式&#xff08;1&#xff09; - itworktor - 程序员的天空 
结果
   从API学习Expression Tree笔记(2)——表达式&#xff08;1&#xff09; - itworktor - 程序员的天空 

转:https://www.cnblogs.com/fujinliang/archive/2013/02/27/2935932.html



推荐阅读
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
author-avatar
伊甸园的常青藤
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有