当前位置: 移动技术网 > IT编程>开发语言>.net > 【转载】C#中自定义Sort的排序规则IComparable接口

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

2019年03月31日  | 移动技术网IT编程  | 我要评论

锂电矿灯价格,洋外教自曝与多名中国女大学生有染,愿有人陪你颠沛流离电视剧

  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

 

备注:原文转载自。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网