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进行遍历
    
}
相关推荐
Anastasiozzzz22 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
缺点内向23 分钟前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
刘琦沛在进步26 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机37 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经1 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L1 小时前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
喵叔哟1 小时前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
云姜.1 小时前
java多态
java·开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法