IComparer 接口Linq比較接口

  IComparer<T>比較兩個對象並返回一個值,指示一個對象是小於、等於仍是大於另外一個對象。javascript

  在Linq當中,不少擴展方法接受一個實現IComparer<T>接口的實例的對象做爲參數,所以想明白Linq中不少個方法的IComparer<TKey> comparer參數的意義,首先要對此接口有個認識。html

  該接口只有一個成員方法:java

  CompareTo  比較當前對象和同一類型的另外一對象。git

  此接口由值能夠排序的類型實現;例如數值或字符串類。值類型或類實現 CompareTo(T) 方法以建立適合排序等目的的類型特定的比較方法。框架

  值          含義  post

  小於零      第二個對象小於第一個對象學習

  零         兩個對象相等this

  大於零      第一個對象大於第二個對象spa

就是要記順序,很不爽。意思是這樣。傳入兩個參數,返回大於零則第一個參數大,小於0則第一個參數小。就這麼簡單,記住吧。code

可是在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>接口
相關文章
相關標籤/搜索