zoukankan      html  css  js  c++  java
  • IComparer<T> 接口Linq比较接口

      IComparer<T>比较两个对象并返回一个值,指示一个对象是小于、等于还是大于另一个对象。

      在Linq当中,很多扩展方法接受一个实现IComparer<T>接口的实例的对象作为参数,因此想明白Linq中很多个方法的IComparer<TKey> comparer参数的意义,首先要对此接口有个认识。

      该接口只有一个成员方法:

      CompareTo  比较当前对象和同一类型的另一对象。

      此接口由值可以排序的类型实现;例如数值或字符串类。值类型或类实现 CompareTo(T) 方法以创建适合排序等目的的类型特定的比较方法。

      值          含义  

      小于零      第二个对象小于第一个对象

      零         两个对象相等

      大于零      第一个对象大于第二个对象

    就是要记顺序,很不爽。意思是这样。传入两个参数,返回大于零则第一个参数大,小于0则第一个参数小。就这么简单,记住吧。

    但是在Linq扩展方法的参数里, 默认是小于0的排在前面,你想哪个大的排前,还是小的排前就哪个返回小于0的数值就可以。

    复制代码
    class Program
        {
            static void Main(string[] args)
            {
                People p1 = new People(1, "刘备", 23);
                People p2 = new People(1, "关羽", 22);
                People p3 = new People(1, "张飞", 21);
                List<People> listP = new List<People>();
                listP.Add(p1);
                listP.Add(p2);
                listP.Add(p3);
                compares c = new compares();
                IEnumerable<People> items = listP.OrderBy(p => p, c);
                foreach (People p in items)
                {
                    Console.WriteLine(p.Name);  //输出张飞关羽刘备
                }
    
                Console.ReadKey();
            }
        }
    
        public class compares : IComparer<People>
        {
            public int Compare(People p1, People p2)
            {
                if (p1.Age > p2.Age)
                {
                    return 1;
                }
                else if (p1.Age == p2.Age)
                {
                    return 0;
                }
                else
                {
                    return -1;
                }
            }
        }
    
        public class People
        {
            public People(int id, string name, int age)
            {
                this.Id = id;
                this.Name = name;
                this.Age = age;
            }
    
            public int Id
            {
                get;
                set;
            }
    
            public string Name
            {
                get;
                set;
            }
    
            public int Age
            {
                get;
                set;
            }
        }
    复制代码
     
     
     
    0
    0
     
    (请您对文章做出评价)
     
    « 上一篇:Linq to BBJECT之非延时标准查询操作符
    » 下一篇:IEqualityComparer<T>接口
  • 相关阅读:
    python 时间等待
    python threading多线程
    c 字符串的结束标志
    c 输出是自动显示输出类型
    c 的占位符
    c数据类型
    游戏引擎
    java 数据类型
    python 读写json数据
    python 多线程_thread
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/4710085.html
Copyright © 2011-2022 走看看