• C# IComparable、IComparer接口:比较两个对象的值

    在 C# 语言中提供了 IComparer 和 IComparable 接口比较集合中的对象值,主要用于对集合中的元素排序。

    IComparer 接口用于在一个单独的类中实现,用于比较任意两个对象。

    IComparable 接口用于在要比较的对象的类中实现,可以比较任意两个对象。

    在比较器中还提供了泛型接口的表示形式,即 IComparer<T> 和 IComparable<T> 的形式。

    对于 IComparer<T> 接口,方法如下表所示。

    方法 作用
    CompareTo(T obj) 比较两个对象值

    如果需要对集合中的元素排序,通常使用 CompareTo 方法实现,下面通过实例来演示 CompareTo 方法的使用。

    【实例 1】在上一节《C#泛型集合》中实例 1 的基础上将学生信息按照年龄从大到小输出。

    根据题目要求,如果不使用比较器,由于集合中的元素是 Student 类型的,不能直接排序,需要按照 Student 学生信息类中的年龄属性排序,因此代码比较烦琐。

    使用 CompareTo 方法实现比较简单。在 Student 类中添加 CompareTo 方法,代码如下。

    class Student:IComparable<Student>
    {
        //提供有参构造方法,为属性赋值
        public Student(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; }
        //重写ToString 方法
        public override string ToString()
        {
            return id + ":" + name + ":" + age;
        }
        //定义比较方法,按照学生的年龄比较
        public int CompareTo(Student other)
        {
            if (this.age > other.age)
            {
                return -1;
            }
            return 1;
        }
    }

    在 Main 方法中创建泛型集合,并向集合中添加项以及进行排序的代码如下。

    class Program
    {
        static void Main(string[] args)
        {
            List<Student> list = new List<Student>();
            list.Add(new Student(1, "小明", 20));
            list.Add(new Student(2, "小李", 21));
            list.Add(new Student(3, "小赵", 22));
            list.Sort();
            foreach(Student stu in list)
            {
                Console.WriteLine(stu);
            }
        }
    }

    执行上面的代码,效果如下图所示。

    IComparable<T>接口中的 CompareTo 方法的使用

更多...

加载中...