zoukankan      html  css  js  c++  java
  • 表达式树摘录(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 - 程序员的天空
  • 相关阅读:
    一个好的技术管理人员需要知道的几件事
    团队必经的五个阶段以及好团队的七个特征
    作为CTO如何做技术升级
    技术领导画像
    TF-IDF原理
    KNN和K-Means的区别
    图数据库入门
    Hbase和Hive的异同
    谈谈机器学习面试
    关于领导力的理解
  • 原文地址:https://www.cnblogs.com/fujinliang/p/2935949.html
Copyright © 2011-2022 走看看