• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【转载】C#中自定义Sort的排序规则IComparable接口

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需要将对应的实体继承IComparable接口来实现。

      MSDN上给IComparable接口的定义为:定义由值类型或类实现的特定于类型的通用比较方法,旨在对其实例进行排序,使自建类的数组可以使用Array. Sort方法进行排序。自建类继承IComparable接口后,必须实现CompareTo方法,该方法参数是一个T类型的对象,返回值必须是-1,0,1中之一。

     下面以一个例子来讲解这个自定义排序,我们定义一个Person人员类,该类包含Name和Age两个属性,要求在数组中调用Sort()方法排序的时候,按年龄Age属性从小到大排序,相应的实现如下代码所示:

class Person : IComparable
    {
        public Person(string name, int age)
        {
            Name = name; Age = age;
        }
        public string Name { get; set; }
        public int Age { get; set; }
       public  int CompareTo(object obj)  //实现该比较方法即可
        {
            if (obj is Person)
            {
                Person p = obj as Person;
                return this.Age.CompareTo(p.Age);
            }
            else
            {
                throw new ArgumentException("Object to compare to is not a Person object");
            }
        }
    }

然后我们写个控制台程序测试下上述的排序结果,测试程序如下:

static void Main(string[] args)
        {
            List<Person> personlist = new List<Person>();
            personlist.Add(new Person("马六",89));
            personlist.Add(new Person("张三",33));
            personlist.Add(new Person("李四",3));
            personlist.Add(new Person("王五", 244));
            personlist.Sort();
            foreach(Person p in personlist)
            {
                Console.Write("姓名:"+p.Name+"  年龄:"+p.Age);
                Console.Write("\n");
                
            }
            Console.ReadKey(); 
        }

运行之后,我们查看下输出的结果信息,完美的达到了我们预期的效果,输出的结果如下:

姓名:李四    年龄:3
姓名:张三    年龄:33
姓名:马六    年龄:89
姓名:王五    年龄:244

 

扩展阅读:目前国内主流的云服务器厂商有哪些_IT技术小趣屋

备注:原文转载自C#中自定义Sort的排序规则IComparable接口_IT技术小趣屋


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ Map实践发布时间:2022-07-14
下一篇:
2020C语言存疑列表发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap