zoukankan      html  css  js  c++  java
  • LinQ表达式目录2

    这里说一句,Expression Tree Visualizer可以从MSDN Code Gallery上的LINQ Sample中得到。现在我们知道了表达式目录树的组成,来看看.NET Framework到底提供了哪些表达式?如下图所示:

    TerryLee_0161

    它们都继承于抽象的基类Expression,而泛型的Expression<TDelegate>则继承于LambdaExpression。在Expression类中提供了大量的工厂方法,这些方法负责创建以上各种表达式对象,如调用Add()方法将创建一个表示不进行溢出检查的算术加法运算的BinaryExpression对象,调用Lambda方法将创建一个表示lambda 表达式的LambdaExpression对象,具体提供的方法大家可以查阅MSDN。上面构造表达式目录树时我们使用了Lambda表达式,现在我们看一下如何通过这些表达式对象手工构造出一个表达式目录树,如下代码所示:

    static void Main(string[] args)
    {
        ParameterExpression paraLeft = Expression.Parameter(typeof(int), "a");
        ParameterExpression paraRight = Expression.Parameter(typeof(int), "b");
        BinaryExpression binaryLeft = Expression.Multiply(paraLeft, paraRight);
        ConstantExpression conRight = Expression.Constant(2, typeof(int));
        BinaryExpression binaryBody = Expression.Add(binaryLeft, conRight);
        LambdaExpression lambda = 
            Expression.Lambda<Func<int, int, int>>(binaryBody, paraLeft, paraRight);
        Console.WriteLine(lambda.ToString());
        Console.Read();
    }

    这里构造的表达式目录树,仍然如下图所示:

    TerryLee_0160

    运行这段代码,看看输出了什么:

    TerryLee_0158  

    可以看到,通过手工构造的方式,我们确实构造出了同前面一样的Lambda表达式。对于一个表达式目录树来说,它有几个比较重要的属性:

    Body:指表达式的主体部分;

    Parameters:指表达式的参数;

    NodeType:指表达式的节点类型,如在上面的例子中,它的节点类型是Lambda;

    Type:指表达式的静态类型,在上面的例子中,Type为Fun<int,int,int>。

    在Expression Tree Visualizer中,我们可以看到表达式目录树的相关属性,如下图所示:

    TerryLee_0163 

  • 相关阅读:
    SOA精华的内容和实用的知识
    众多SEO专家集体盛赞
    黑客大曝光:VoIP安全机密与解决方案
    博文视点大讲堂41期SEO难点之网站内部链接结构
    TransactSQL管理与开发实例精粹
    千万不要错过云计算兴起的时代
    《海量数据库解决方案》之位图索引的结构和特征
    Oracle开发艺术
    Android应用程序的开发
    BizTalk Accelerator for HL7医疗行业消息路由处理机制
  • 原文地址:https://www.cnblogs.com/meilibao/p/2681335.html
Copyright © 2011-2022 走看看