C#通过接口 继承接口的类 实现约束 对List内数据类型的值进行排序,可直接复制使用

工具类

通过接口 继承接口的类 实现约束 对List内数据类型的值进行排序,可直接复制使用

复制代码
 //工具类 Tools
 //说明接口的
 //1.先有接口 2.继承接口的类 3.实现约束
 public interface IComParable<T>            //接口
 {
     int ComPareTo(T other);                //在list的数组中,想对几种数据进行排列,就要写几个方法
                                            //这里以一种数据举例
 }
 public class Person : IComParable<Person>  //继承接口的类
 {
     public string Name { get; set; }
     public int Age { get; set; }
     public Person(string name, int age)
     {
         Name = name;
         Age = age;
     }
     //实现接口的方法
     public int ComPareTo(Person other)     //实现接口的方法
     {
         if(other == null) return 1;
         return this.Age.CompareTo(other.Age);
     }
     //重写Tostring方便打印
     public override string ToString()
     {
         return $"{Name}:{Age} years old";
     }
 }
 //使用接口约束
 internal class MyComparer<T>where T:IComParable<T>
 {
     //比较:两个对象
     public bool IsGreater(T x,T y)
     {
         //原则意义上来说,T如果是对象,那么是没有办法比较的,但是当前对象中因为有从接口实现的比较方法,在内部是对Age进行的比较,所以这里x和y能够进行比较
         //注意,这里的x和y必须是Person的对象
         return x.ComPareTo(y) > 0;
     }
     //对列表进行排序
     public void Sort(List<T> list)
     {
         //Sort可以立即为只能对值类型的数据进行比较,没办法比较复杂类型
         list.Sort((x, y) => x.ComPareTo(y));
     }
 }
复制代码
MyComparer<Person> myComparer = new MyComparer<Person>(); //将接口约束实例化
List<Person> list = new List<Person>        //向Person中添加数据并将其添加到List中
{
    new Person("Alice",40),
    new Person("Bob",28),
    new Person("David",35),
    new Person("Eva",18),
};
//使用自己封装的泛型方法排序
myComparer.Sort(list);                      //使用接口约束中的对列表排序的方法
Console.WriteLine("排序过后");
foreach (var item in list)
{
    Console.WriteLine(item);                //使用Foreach进行遍历
    
}
相关推荐
isyangli_blog7 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008117 小时前
FastAPI APIRouter
开发语言·python
Benszen7 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆7 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木7 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充8 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~8 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6168 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
春生野草8 小时前
反射、Tomcat执行
java·开发语言
雪的季节9 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt