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 的新特性。

  • 相关阅读:
    Codeforces 834D The Bakery
    hdu 1394 Minimum Inversion Number
    Codeforces 837E Vasya's Function
    Codeforces 837D Round Subset
    Codeforces 825E Minimal Labels
    Codeforces 437D The Child and Zoo
    Codeforces 822D My pretty girl Noora
    Codeforces 799D Field expansion
    Codeforces 438D The Child and Sequence
    Codeforces Round #427 (Div. 2) Problem D Palindromic characteristics (Codeforces 835D)
  • 原文地址:https://www.cnblogs.com/recordlife/p/4211051.html
Copyright © 2011-2022 走看看