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

devtools/2025/2/28 21:21:15/

工具类

通过接口 继承接口的类 实现约束 对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进行遍历}

http://www.ppmy.cn/devtools/163445.html

相关文章

JMeter 的基础知识-安装部分

以下将从环境配置开始,为你详细介绍 JMeter 的基础知识,涵盖环境搭建、界面认知、测试计划创建、常用组件使用等方面内容。 1. 环境配置 1.1 安装 Java JMeter 是基于 Java 开发的,所以需要先安装 Java 开发工具包(JDK)。 下载 JDK:访问 Oracle 官方网站(https://www…

Ubuntu 创建新用户及设置权限

1、新建用户 sudo adduser username 其中username是你要创建的用户的用户名&#xff0c;然后设置密码和相关信息就可以了 2、给新用户sudo权限 新创建的用户没有root权限&#xff0c;我们执行以下命令给用户sudo权限 sudo usermod -a -G adm username sudo usermod -a -G s…

FastExcel 实现数据分批次导入、导出

是基于 FastExcel 实现数据分批次导入和保存的完整解决方案&#xff0c;结合了高性能流式读取与分批处理机制&#xff1a; 一、环境准备 依赖配置 <dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version&…

P9420 [蓝桥杯 2023 国 B] 子 2023

P9420 [蓝桥杯 2023 国 B] 子 2023 题目 分析代码 题目 分析 刚拿到这道题&#xff0c;我大脑简单算了一下&#xff0c;这个值太大了&#xff0c;直观感觉就很难&#xff01;&#xff01; 但是&#xff0c;你仔仔细细的一看&#xff0c;先从最简单的第一步入手&#xff0c;再…

JWT+redis实现令牌刷新优化方案

令牌刷新优化方案的详细实现步骤&#xff1a; 1. 令牌服务层改造 1.1 JWT工具类增强 // JwtUtils.java 新增方法 public class JwtUtils {// 生成带动态过期时间的令牌public static String createToken(String subject, String userId, String username, long expirationMi…

20250227解决飞凌OK3588-C的linux R4通过adb拷贝文件速度过慢的问题

20250227解决飞凌OK3588-C的linux R4通过adb拷贝文件速度过慢的问题 2025/2/27 16:51 缘起&#xff1a;最近测试OK3588-C的最新的R1版本的SDK&#xff0c;adb pull的速度为28.8 MB/s Z:\version\OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1 我司使用4线的USB2.0&#xff0c;…

ERROR:This version of pnpm requires at least Node.js vXXX 的解决方案

This version of pnpm requires at least Node.js vXXX 的解决方案 Centos7环境下&#xff0c;pnpm与Node.js版本不兼容导致报错 This version of pnpm requires at least Node.js vXXX 的解决方案 错误原因其实就是 pnpm 的版本不兼容 Node.js 的版本&#xff0c;明白了可以…

HOW POWERFUL ARE GRAPH NEURAL NETWORKS?(GIN)

GIN——Graph Isomorphism Network normal message deliverer related work GraphSAGE(Inductive Representation Learning on Large Graphs) 突破传统基于矩阵分解的节点嵌入方式&#xff0c;GraphSAGE 通过采样和聚合节点局部邻域的特征信息来生成嵌入&#xff0c;同时学习…