表达式树摘录(2

面学习了一些相对比较简单的表达式,如:ConstantExpression、ParameterExpression、UnaryExpression、BinaryExpression、NewExpression、NewArrayExpression 、TypeBinaryExpression表达式,本篇将学习剩下几个表达式.

本文内容
ConditionalExpression介绍      表示条件的表达式
InvocationExpression介绍        表示将委托或lambda表达式应用于参数表达式列表的表达式
LambdaExpression介绍           表示一个Lambda表达式
ListIntiExpression介绍              表示一个表示包含集合初始值设定项的构造函数调用
MemberExpression介绍           表示一个访问字段或属性的表达式
MemberInitExpression介绍      
MethodCallExpression介绍      表示调用一种方法表达式

ConditionalExpression介绍
       该类封装包含条件运算符的表达式,主要通过 Condition 工厂方法创建ConditionalExpression,它的NodeType为 Conditional。

属性
  IfFalse              获取当测试的计算结果为false时要执行的表达式
  IfTrue                获取当测试的计算结果为true时要执行的表达式
  Test                 获取条件运算的测试

工厂方法Condition
从API学习Expression笔记(3)——表达式2 - itworktor - 程序员的天空

示例
  下面的代码示例演示如何创建一个表达式来表示条件语句。 如果第一个参数的计算结果为 true,则执行第二个参数;否则执行第三个参数。从API学习Expression笔记(3)——表达式2 - itworktor - 程序员的天空
运行结果:

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

 InvocationExpression介绍
      该类封装了表示将委托或lambda表达式应用于参数表达式列表的表达式,主要使用 Invoke工厂方法创建InvocationExpression,它的NodeType为 Invoke。

属性
  Arguments        获取对其应用委托的参数
  Expression        获取要应用的委托或lambda表达式

示例
    下面的示例演示如何使用 Invoke(Expression, Expression[]) 方法创建一个 InvocationExpression,表示使用指定的参数调用 lambda 表达式。

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

 

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

LambdaExpression介绍
       该类封装了一个Lambda表达式。LambdaExpression 类型以表达式目录树的形式表示 lambda 表达式。Expression<TDelegate> 类型派生自 LambdaExpression,它能够更加显式地捕获 lambda 表达式的类型,也可以用于表示 lambda 表达式。在运行时,表示 lambda 表达式的表达式目录树节点始终属于类型Expression<TDelegate>.

 

LambdaExpression NodeType 属性的值为 Lambda

 

使用 Lambda 工厂方法可创建 LambdaExpression 对象。

成员
 Body                  获取Lambda表达式的主体
 Parameters       获取Lambda表达式的参数
Compile()方法  主要用于生成表示Lambda表达式的委托。

Lambda工厂方法
    创建一个表示 lambda 表达式的表达式树,重载
从API学习Expression笔记(3)——表达式2 - itworktor - 程序员的天空

 

示例
  下面的示例演示了 (a, b) => ((a * b) + 2) 的Lambda表达式创建过程
从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空
运行结果

 

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

 

 

ListInitExpression介绍
   该类封装了一个表示包含集合初始值设定项的构造函数调用,主要使用ListInit工厂方法来创建ListInitExpression,它的NodeType属性值为 ListInit

主要属性
  Initializers           获取用于初始化集合的元素初始值设定项, 返回 ReadOnlyCollection<ElementInit>类型
  NewExpression  获取包含对集合类型的构造函数的调用表达式,返回NewExpression  类型

工厂方法
从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空

 示例
      下面的示例创建一个 ElementInit,表示初始化字典集合的一个元素。
 从API学习Expression Tree笔记(3)——表达式(2) - itworktor - 程序员的天空
结果
   从API学习Expression Tree笔记(3)——表达式(2) - itworktor - 程序员的天空MemberExpression介绍
     该类表示访问字段或属性,通过使用Field、Property或PropertyOrField工厂方法创建MemberExpression, 它的NodeType属性值为 MemberAccess

 属性
      Expression      获取字段或属性的包含对象 
从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空
    Member          获取要访问的字段或属性
从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空
工厂方法
   Field(Expression, FieldInfo)             创建一个表示访问字段的 MemberExpression。
   Field(Expression, String)                 在给定字段名称的情况下,创建一个表示访问此字段的 MemberExpression。
   Property(Expression, MethodInfo)    使用属性访问器方法创建一个表示访问属性的 MemberExpression。
   Property(Expression, PropertyInfo)   创建一个表示访问属性的 MemberExpression
   Property(Expression, String)            在给定属性名称的情况下,创建一个表示访问此属性的MemberExpression。
   PropertyOrField(Expression, String)  在给定属性或字段的名称的情况下,创建一个表示访问此属性或字段的MemberExpression。

示例
    下面的示例创建一个 MemberExpression,表示获取字段成员的值。
从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空
   运行结果:
  从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空

MemberInitExpression介绍
     该类表示调用构造函数并初始化新对象的一个或多个成员,主要通过 MemberInit 工厂方法创建 MemberInitExpression, 它的NodeType值为 MemberInit

主要属性
   Bindings                  获取描述如何初始化新创建对象成员的绑定,返回ReadOnlyCollection<MemberBinding> 类型。
   NewExpression      获取表示构造函数调用的表达式,返回NewExpression  类型。

工厂方法
    MemberInit(NewExpression, IEnumerable<MemberBinding>)            创建一个 MemberInitExpression。
    MemberInit(NewExpression, MemberBinding[] )                                  创建一个 MemberInitExpression。

示例

 

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

 

 
MethodCallExpression介绍
     该类表示调用一种方法,   可以使用Call、 ArrayIndex  工厂方法创建MethodCallExpression。  它的NodeType属性值为 Call。

属性
   Arguments   获取被调用方法的参数       public ReadOnlyCollection<Expression> Arguments { get; }
   Method         获取被调用的方法             public MethodInfo   Method  { get; }
   Object          获取方法接收的对象          public Expression  Object   { get; }

 工厂方法
    Call(Expression, MethodInfo)                                                  创建一个表示调用不带参数的方法的 MethodCallExpression
    Call(MethodInfo, Expression[])                                                创建一个表示调用static方法的 MethodCallExpression
    Call(Expression, MethodInfo, IEnumerable<Expression>)          创建一个表示调用带参数的方法的 MethodCallExpression
    Call(Expression, MethodInfo, Expression[])                              创建一个表示调用带参数的方法的 MethodCallExpression
    Call(Expression, String, Type[], Expression[])                           通过调用适当的工厂方法创建一个表示调用实例方法的 MethodCallExpression
    Call(Type, String, Type[], Expression[])                                    通过调用适当的工厂方法创建一个表示调用static方法的 MethodCallExpression
    ArrayIndex(Expression, IEnumerable<Expression>)                  创建一个表示对秩大于1的数组应用数组索引运算符的 MethodCallExpression
    ArrayIndex(Expression, Expression)                                        创建一个表示对秩为1 的数组应用数组索引运算符的 BinaryExpression
    ArrayIndex(Expression, Expression[])                                      创建一个表示对秩大于1的数组应用数组索引运算符的 MethodCallExpression。

示例
   下面的示例演示如何创建调用采用一个参数的 static 方法的表达式
从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空从API学习Expression Tree笔记(3)——表达式2 - itworktor - 程序员的天空
  运行结果:

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

 

posted @ 2013-02-27 22:45  广拓小程序  阅读(365)  评论(0编辑  收藏  举报