• LinQ In Action 学习第二章


    第二章主要复习.net 3.0 与Linq 有关的新知识

    1.隐式类型: 必须初始化不能赋值null,只是由编译器推测其类型罢了

    2. 对象初始化器,集合初始化器

    1,2 很简单就不介绍了

    3. lamdor 表达式 涉及到委托 需要好好研究一下 委托。

    4.匿名方法

    5. 扩展方法

    6.匿名类型

    这一章看完觉得比较简单。 写一个总的例子应用上上述所有特性吧。

    一:委托的例子

    // 声明委托类型

    public delegate bool FilterDelegate(Process p);
        public class ProcessData
        {
            public string Name { set; get; }
            public Int64 Memory { set; get; }
            public Int32 ID { set; get; }
        }
        class Program
        {

        //把委托注册到方法上。
            static void displayProcesses( FilterDelegate match)
            {
                var plist = new List<ProcessData>();
                foreach (var p in Process.GetProcesses())
                {
                    if (match(p))
                    {
                        plist.Add(new ProcessData { ID = p.Id, Memory = p.WorkingSet64, Name = p.ProcessName });
                    }
                }
                ObjectDumper.Write(plist);
               
            }
            public static bool Filter(Process pro) {
               return pro.WorkingSet64  >= 20*1024*1024;
            }
            static void Main(string[] args)
            {

          // 应用委托
                displayProcesses(Filter);
                Console.Read();
            }
     
        }

    也可以用Predict <T> 微软定义好的返回boolean 类型的委托 参数object.

    优化后的代码:

     static void displayProcesses( Predicate<Process> match)
            {
                var plist = new List<ProcessData>(); // implicitly type variant
                foreach (var p in Process.GetProcesses())
                {
                    if (match(p))
                    {
                        plist.Add(new ProcessData { ID = p.Id, Memory = p.WorkingSet64, Name = p.ProcessName });//Object initializor
                    }

                }
                ObjectDumper.Write(plist);
               
            }
            static void Main(string[] args)
            {
                displayProcesses(pcess => pcess.WorkingSet64 >= 20 * 1024 * 1024); // lamador Expression
                Console.Read();
            }

     最后写一个总的例子,把应用到的技术加comment 加以标注。

    public class ProcessData
        {
            public string Name { set; get; }
            public Int64 Memory { set; get; }
            public Int32 ID { set; get; }
        }
        static class Program
        {
            static void displayProcesses( Predicate<Process> match)
            {
                var plist = new List<ProcessData>(); // implicitly type variant
                foreach (var p in Process.GetProcesses())
                {
                    if (match(p))
                    {
                        plist.Add(new ProcessData { ID = p.Id, Memory = p.WorkingSet64, Name = p.ProcessName });//Object initializor
                    }

                }
                ObjectDumper.Write(plist);
                // display total memory for process and top 2 process memory
                Int64 sumMeoryTotal = plist.TotalMemory(); // extension method.
                Console.WriteLine("Memory of all the process:" + sumMeoryTotal);
                var tot2ProcessMemory =
                    plist.OrderByDescending(p => p.Memory)
                        .Take(2).Sum(pp => pp.Memory);
                Console.WriteLine("top 2 process Memory ; " + tot2ProcessMemory);
     
            }
             static Int64 TotalMemory(this IEnumerable<ProcessData> p)
            {
                return  p.Sum( pp => pp.Memory );
            }
             static Int64 TotalMemoryProcess(this IEnumerable<ProcessData> pp)
            {
                Int64 sum = 0;
                foreach (var p in pp)
                {
                    sum += p.Memory;
                }
                return sum;
            }
            static void Main(string[] args)
            {
                displayProcesses(pcess => pcess.WorkingSet64 >= 20 * 1024 * 1024); // lamador Expression
                Console.Read();
            }

    第二张结束,主要介绍了关于linq要用的.net 3.0 的新特性。

  • 相关阅读:
    解决Sublime 3提示 Sublime Text Error while loading PyV8 binary
    SQL中select与set的区别
    Microsoft Dynamics CRM 2011 安装完全教程
    sql语句优化
    CRM牛人博客
    Customize Spring @RequestParam Deserialization for Maps and/or Nested Objects
    Customize Spring @RequestParam Deserialization for Maps and/or Nested Objects
    Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
    Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
    使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)
  • 原文地址:https://www.cnblogs.com/recordlife/p/4211051.html
Copyright © 2020-2023  润新知