static void Main()
{
var people = new ArrayList();
people.AddRange(new ArrayList
{
new Person{ Name = "Jone",Age = },
new Person{ Name = "Tom",Age = },
new Person{ Name = "Lily",Age = },
new Person {Name = "July",Age = }
});
Console.WriteLine("↓↓↓ Old ↓↓↓");
foreach (Person person in people)
{
Console.WriteLine($"person name:{person.Name} age:{person.Age}");
}
people.Sort(); //new PersonComparer()
Console.WriteLine("↓↓↓ New ↓↓↓");
foreach (Person person in people)
{
Console.WriteLine($"person name:{person.Name} age:{person.Age}");
} Console.ReadKey();
}

IComparable 是用于类对其的CompareTo方法进行实现,比较的对象包含自身,并且集合调用默认的Sort方法 (个人理解是框架提供的默认比较方式)

   class  Person :IComparable
{
public string Name { get; set; } public int Age { get; set; }
public int CompareTo(object obj)
{
if (obj is Person person)
{
return this.Age - person.Age;
}
else
{
throw new ArgumentException("Object is not a Person");
}
}
}

IComparer  是比较两个Object,是以比较器的形式存在的,并且集合调用Sort(new XxxComparer())方法(个人理解是框架对默认比较方式的扩展吧,用以满足特定的需求)

 class PersonComparer:IComparer
{
public int Compare(object x, object y)
{
if (x is Person personX && y is Person personY)
{
if (Object.ReferenceEquals(x,y))
{
return ;
}
int result = String.Compare(personX.Name, personY.Name, StringComparison.Ordinal);
if (result == )
{
result = personX.Age - personY.Age;
} return result;
}
else
{
throw new ArgumentException("Object is not a Person");
}
}
}

IComparer 与 IComparable的更多相关文章

  1. .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解

    本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...

  2. CSharp - Comparison between IComparer and IComparable

    /* Author: Jiangong SUN */ I've already written an article introducing the usage of comparer here. I ...

  3. Comparer<T> IComparer<T> IComparable<T>

    Comparer<T>.Default Property Comparer<T>.Default doesn't use your FooComparer class. It ...

  4. Icomparer和Icomparable集合排序

    c#中实现对象集合的排序可以使用ArrayList中的Sort()方法,而有比较才能谈排序,因为不是基本类型(如string ,int.double......等)所以.NET Framework不可 ...

  5. IComparer、IComparable、StringComparison枚举、CultureInfo 的用法

    IEnumerable<T> 和 IEnumerator<T>.泛型版本是新式代码的首要选项. InvariantCulture:程序间.程序数据库.程序网络交互用Invari ...

  6. C#中如何使用IComparable<T>与IComparer<T>接口(转载)

    本分步指南描述如何使用两个接口: IComparer和IComparable.在同一篇文章中讨论这些接口有两个原因.经常在一起,使用这些接口和接口类似 (并且有相似的名称),尽管它们用于不同用途. 如 ...

  7. C# 中的IComparable和IComparer

    前言 在开发过程中经常会遇到比较排序的问题,比如说对集合数组的排序等情况,基本类型都提供了默认的比较算法,如string提供了按字母进行排序,而int整数则是根据整数大小进行排序.但是在引用类型中(具 ...

  8. 转载:C#中的泛型

    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...

  9. C#中的泛型 【转】

    C#中的泛型 泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确 ...

随机推荐

  1. 用java实现从命令行接收多个数字,求和之后输出结果。

    用java实现从命令行接收多个数字,求和之后输出结果. 1 设计思想: (1)建立类. (2)输出参数个数. (3)定义int型的num和sum,分别用来存储参数和参数的和. (4)用for循环讲参数 ...

  2. android去应用市场升级

    private String getAppInfo() {   try {   String pkName = this.getPackageName();   String versionName ...

  3. 在C#中internal、protected internal关键字是什么意思?

    internal:就是程序集. 那么什么是程序集呢?就是“项目”也就是工程里中的csproj 比如:我有个解决方案,这个方案中有2个项目,1个是控制台程序,1个是webapi项目,那么我这个解决方案中 ...

  4. 重写UIImageView的image属性

    重写UIImageView的image属性 效果: 当你重写了UIImageView的image属性后你就会对UIImageView怎么显示图片了如指掌了:) 源码: UIImageView.h  + ...

  5. Google论文系列(2) MapReduce

    思想 map函数:处理一组key/value对进而生成一组key/value对的中间结果 reduce函数:将具有相同Key的中间结果进行归并 实现 环境 普通带宽,上千台机器(失败变得正常),廉价硬 ...

  6. 美团2018年CodeM大赛-初赛B轮 B 配送(最短路)

    美团2018年CodeM大赛-初赛B轮 B 配送 题意 题解 对于每个任务,只要从上个任务的终点出发即可. 时间.地点很少,可以算出每个地点-时间的最小花费. 以题目描述的起点终点起始结束时间建图,很 ...

  7. ecshop hash登录 + wordpress mysql盲注字段

    delete_cart_goods.php  post  id=a * sq_xfkjbd 暴库and(select 1 from(select count(*),concat((select (se ...

  8. 秒杀场景下MySQL的低效(转)

    秒杀场景下MySQL的低效 2016-01-14 17:12 178人阅读 评论(0) 收藏 举报 最近业务试水电商,接了一个秒杀的活.之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己 ...

  9. Docker扩展.md

    逻辑卷 Volume 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数 ...

  10. webkit架构

    简要的说,WebKit由三个模块组成:JavaScriptCore.WebCore 和 WebKit.WebKit作为了整个项目的名称. JavaScriptCore:是JavaScript解释器: ...