zoukankan      html  css  js  c++  java
  • 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 的新特性。

  • 相关阅读:
    C# 保存文件到数据库
    4.Linq To Xml操作XML增删改查
    服务器端包含 SSI简介
    htm、html、shtml网页区别
    localStorage使用总结
    jquery.cookie.js——jquery的cookie插件
    javascript:;与javascript:void(0)使用介绍
    JS中函数void()
    gitlab使用 —— 多人协同工作(重要技能)
    cookie、localstroage与sessionstroage的一些优缺点
  • 原文地址:https://www.cnblogs.com/recordlife/p/4211051.html
Copyright © 2011-2022 走看看