• .NET (四)委托第四讲:内置委托Comparison


    // 摘要: 
        //     表示比较同一类型的两个对象的方法。
        //
        // 参数: 
        //   x:
        //     要比较的第一个对象。
        //
        //   y:
        //     要比较的第二个对象。
        //
        // 类型参数: 
        //   T:
        //     要比较的对象的类型。
        //
        // 返回结果: 
        //     一个有符号整数,指示 x 与 y 的相对值,如下表所示。 值 含义 小于 0 x 小于 y。 0 x 等于 y。 大于 0 x 大于 y。
        public delegate int Comparison<in T>(T x, T y);

    Comparison委托用于比较两个对象的大小。

        class Class4
        {
            public delegate int MyCompare(Customer a, Customer b);
            static void Main1(String[] args)
            {
                Customer c1 = new Customer() { Name = "zhangsan", Age = 18 };
                Customer c2 = new Customer() { Name = "zhangsan", Age = 17 };
                Customer c3 = new Customer() { Name = "zhangsan", Age = 20 };
                Customer c4 = new Customer() { Name = "zhangsan", Age = 10 };
                Customer c5 = new Customer() { Name = "zhangsan", Age = 25 };
                List<Customer> list = new List<Customer>();
                list.Add(c1);
                list.Add(c2);
                list.Add(c3);
                list.Add(c4);
                list.Add(c5);
    
                Comparison<Customer> comparesion = new Comparison<Customer>(Compare);
                list.Sort(comparesion);
    
    
                ObjectDumper.Write(list);
    
            }
            //比较两个对象大小
            public static int Compare(Customer c1, Customer c2)
            {
                if (c1.Age > c2.Age)
                {
                    return 1;
                }
                else if(c1.Age==c2.Age)
                {
                    return 0;
                }
                else
                {
                    return -1;
                }
            }
        }
    
        class Customer
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }

    List集合中的 Sort方法,接受该委托:

    //
            // 摘要: 
            //     使用指定的 System.Comparison<T> 对整个 System.Collections.Generic.List<T> 中的元素进行排序。
            //
            // 参数: 
            //   comparison:
            //     比较元素时要使用的 System.Comparison<T>。
            //
            // 异常: 
            //   System.ArgumentNullException:
            //     comparison 为 null。
            //
            //   System.ArgumentException:
            //     在排序过程中,comparison 的实现会导致错误。 例如,将某个项与其自身进行比较时,comparison 可能不返回 0。
            public void Sort(Comparison<T> comparison);

    也可直接将方法传入:

    list.Sort(Compare);

    或者省略方法名:

    list.Sort(delegate(Customer a, Customer b)
                {
                    if (a.Age > b.Age)
                    {
                        return 1;
                    }
                    else if (a.Age == b.Age)
                    {
                        return 0;
                    }
                    else
                    {
                        return -1;
                    }
                });

    Lamada:

    //代码演进
                list.Sort((Customer a, Customer b) =>
                {
                    if (a.Age > b.Age)
                    {
                        return 1;
                    }
                    else if (a.Age == b.Age)
                    {
                        return 0;
                    }
                    else
                    {
                        return -1;
                    }
                });
  • 相关阅读:
    使用Parallel计算目录中的文件字节长度
    任务工厂
    启动新任务和子任务
    服务器端小程序
    Java核心技术II读书笔记(三)
    Java核心技术II读书笔记(二)
    Java核心技术II读书笔记(一)
    多线程-线程的中断
    http协议详解
    java UncaughtExceptionHandler 处理线程意外中止
  • 原文地址:https://www.cnblogs.com/gosky/p/6038767.html
Copyright © 2020-2023  润新知