zoukankan      html  css  js  c++  java
  • [深入浅出.NET]——表达式树分析器尝鲜记

      在Visual Studio 2008 CSharp sample(下载地址)中包含了许多有价值的工具。利用这些工具,开发人员可以更加高效的开发。其中一个工具就是表达式树分析器(Expression Tree Visualizer)

    运行环境

    OS: Name:     Microsoft(R) Windows(R) Server 2003, Enterprise Edition, Version: 5.2.3790 Service Pack 2 Build 3790,Install Path:C盘。

    IDE:Visual Studio 2008 Version 9.0.30729.1 SP,.NET Framework Version 3.5 SP1

    使用表达式树分析器

    准备使用表达式树分析器

    1、  下载Visual Studio 2008 CSharp 实例

    2、  解压实例,并执行F6运行ExpressionTreeVisualizer项目(所在位置:…\CSharpSamples\LinqSamples\ExpressionTreeVisualizer),生成dll文件:\CSharpSamples\LinqSamples\ExpressionTreeVisualizer\bin\Debug

    3、  拷贝dll到分析器目录

    以下两个目录只需放置一个地方即可。

    个人使用的分析器目录

    一般放置在操作系统盘符C:\Documents and Settings\lion.lv\My Documents\Visual Studio 2008\Visualizers

    根据个人喜好我们也可以使用VS2008定制路径:

    插图

    公共使用分析器目录

    比如我的VS2008指定安装在D

    D:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\Visualizers

    运用表达式树分析器           

    场景1:用来查看变量表达式

    1、 建立控制台应用程序

    增加以下代码到programMain方法中

    using System;

    using System.Linq.Expressions;

     

    namespace ConsoleApplication107

    {

        class Program

        {

            static void Main(string[] args)

            {

                Expression<Func<int, int, int>> expression = (a, b) => a + b;

     

                Console.WriteLine(expression);

            }

        }

    }

    2、 vs运行时查看变量表达式的快速提示

    设置断点在WriteLine行,F5运行程序后,鼠标移到expression上时,弹出带有放大镜的小信息框

    3、  点击放大镜查看表达式树分析器

    当你勾选分析器选项,单击就可以查看到表达式树的所有节点。

    场景2:用来查看lambda表达式

    在使用LINQ to SQL查询时,我们可以使用表达式树分析器来查看表达式树。在这种场景下,表达式树作为由LINQ to SQL 查询表达式返回的IQueryable变量的成员。

     

    小结:

    本文主要介绍了如何使用VS2008例子中提供的表达式树分析器。

    SourceCode

    //Demo1

                //Expression<Func<int, int, int>> expression = (a, b) => a + b;

                //Console.WriteLine(expression);

     

                //Demo2

                //var persons = new List<Person> {

                //            new Person{Name="James",Age=19},

                //            new Person {Name = "Alfred", Age=20},

                //            new Person {Name = "Mingle", Age=21},

                //        };

               

                //var selectperson = from p in persons where p.Age >= 20 select p.Name.ToUpper();

                //foreach (var q in selectperson)

                //    Console.WriteLine(q);

                

                ////Demo3 

                DataContext ctx = new DataContext("server=127.0.0.1;database=Northwind;uid=sa;pwd=123456");

                Table<Customer> Customers = ctx.GetTable<Customer>();

                var query = from c in Customers

                            where c.City == "Shanghai"

                            select c;

                foreach (var q in query)

                    Console.WriteLine(q.CustomerID);

     

                //Demo4

                //var select = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new { 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };

                //DataContext ctx = new DataContext("server=wss-test;database=Northwind;uid=sa;pwd=123456");

                //Table<Customer> Customers = ctx.GetTable<Customer>();

                //var query = from c in Customers

                //            where c.City == "Shanghai"

                //            select c;

                //foreach (var q in query)

                //    Console.WriteLine(q.CustomerID);

            }

        }

        class Person

        {

            public string Name { get; set;}

            public int Age {get;set;}

        }

    参考资料:

    http://blogs.msdn.com/charlie/archive/2008/02/13/linq-farm-seed-using-the-expression-tree-visualizer.aspx

    扩展思考:

    1、  表达式树分析器在VS2008中部署的办法在VS2010中无效,哪么我们在VS2010中应该如何使用呢?

  • 相关阅读:
    linux下c语言实现搜索根目录下所有文件(转-wangxiangshang)
    windows编程之GDI基础--获取设备内容属性(三)
    windows编程之GDI基础--设备内容(二)
    windows编程之GDI基础(一)
    windows编程之滚动条(新式滚动条函数)
    window编程之滚动条(老式滚动条)
    来博客园混了...
    实现一个4位加减法与或运算选择器(作业)
    黑客初级知识(四)
    黑客初级知识(三)
  • 原文地址:https://www.cnblogs.com/mingle/p/1623168.html
Copyright © 2011-2022 走看看