IComparable和IComparer

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace no._1
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList arr1 = new ArrayList() {
            new Person() { Name="Shi",Age=17 },
            new Person() { Name="Da",Age=21 },
            new Person() { Name="Wu",Age=14 }};

            Console.WriteLine("arr1 Before:");
            for (int i = 0; i < arr1.Count; i++)
            {
                Console.WriteLine(((Person)arr1[i]).Name);
            }

            arr1.Sort();
            Console.WriteLine("arr1 After Sort:");
            for (int i = 0; i < arr1.Count; i++)
            {
                Console.WriteLine(((Person)arr1[i]).Name);
            }

            ArrayList arr2 = new ArrayList() {
            new Person() { Name="K",Age=21 },
            new Person() { Name="D",Age=24 },
            new Person() { Name="W",Age=15 },
            new Person() { Name="Z",Age=25 } };

            Console.WriteLine("arr2 Before:");
            for (int i = 0; i < arr2.Count; i++)
            {
                Console.WriteLine(((Person)arr2[i]).Name);
            }

            arr2.Sort(new PersonByAge());
            Console.WriteLine("arr2 After Sort:");
            for (int i = 0; i < arr2.Count; i++)
            {
                Console.WriteLine(((Person)arr2[i]).Name);
            }

            Console.ReadKey();
        }

        class PersonByAge : IComparer
        {
            public int Compare(object x, object y)
            {
                Person p1 = x as Person;
                Person p2 = y as Person;

                if(p1!=null && p2!=null)
                {
                    return p1.Age - p2.Age;
                }
                else
                {
                    throw new ArgumentException() { };
                }
            }
        }

        class Person : IComparable
        {
            public string Name { get; set; }
            public int Age { get; set; }

            public int CompareTo(object obj)
            {
                Person p = obj as Person;
                if (p == null)
                {
                    throw new ArgumentException() { };
                }
                else
                {
                    return p.Age - this.Age;
                }
            }
        }
    }
}
时间: 2024-12-09 22:25:12

IComparable和IComparer的相关文章

比较和排序(IComparable和IComparer以及它们的泛型实现)

本文摘要: 1:比较和排序的概念: 2:IComparable和IComparer: 3:IComparable和IComparer的泛型实现IComparable<T>和IComparer<T>: 1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如string提供了按字母进行比较,int提供了按整数大小进行比较. 2:ICompara

C# 中的IComparable和IComparer

前言 在开发过程中经常会遇到比较排序的问题,比如说对集合数组的排序等情况,基本类型都提供了默认的比较算法,如string提供了按字母进行排序,而int整数则是根据整数大小进行排序.但是在引用类型中(具有多个字段),那么这个排序当然也是取决于我们特定的值. IComparable接口 该接口由其值可以排序或排序的类型实现,并提供强类型的比较方法以对泛型集合对象的成员进行排序,例如数字可以大于第二个数字,一个字符串可以在另一个字符串之前以字母顺序出现.他要求实现类型定义的一个方法,CompareTo

对象的比较与排序:IComparable和IComparer接口

IComparable和ICompare 接口是.net framework 中比较对象的标准方式,这两个接口提供一个返回值类似(大于0 等于0 小于0)的比较方法,二者区别如下: 1. IComparable 在要比较的对象的类中实现,可以比较该对象和另一个对象. 2. IComparer 在一个单独的类中实现,可以比较任意两个对象. 先看 IComparable 这个接口方法是 int CompareTo(object obj); 方法只有一个参数,我们知道比较至少要有两个对象,所以这个方法

IComparable和IComparer接口的简析

默认情况下,对象的Equals(object o)方法是比较两个对象是否引用同一个对象.如果我们有自己的对象,就要自己定义对象比较方式: 1.IComparable在要比较的对象(类的实例化就是对象)类中实现,可以比较该对象和另一个对象. 2.IComparer在一个单独的类中实现,可以任意比较两个对象. 通俗的讲,IComparable是能够比较,具备比较的能力.比如说某个人具备编程的能力,如果需要对编程能力的高低进行比较的话,就必须在自己的类中去实现怎么具体的方法.IComparer是比较者

C# 常用接口学习 IComparable 和 IComparer

作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 2015 参考: Microsoft Refernce Souce MSDN 章节: 接口 IConmparable 实现 接口 IComparable<T> 实现 接口 IComparer<T> 实现 正文: 一.接口 IConmparable 的实现 class Fruit {     public string Name;     public int

比较和排序 IComparable And IComparer

1.List<Student>默认排序 为类创建默认排序实现IComparable,此代码的实现为年龄升序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IComparable_And_IComparer.Model { /// <summary> /// 学生类 /// <

C# 用实例来理解IComparable和IComparer

通过Array的Sort方法来理解的 Sort方法要 通过对象去继承IComparable接口来实现排序(当然也有其它办法),我想入门这可能就是对这句话有点不理解,在下面会有注释 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections; namespace ConsoleApplication1{ /// <summary> /// 设置

比较和排序:IComparable和IComparer

创建实体类,如Person,默认按照年龄进行排序,则需要为实体类实现IComparable接口. class Person : IComparable { public string Name { get; set; } public int Age { get; set; } public override string ToString() { return string.Format("Name : {0} ; Age : {1} .", this.Name, this.Age)

实现IComparable、IComparer接口

using System;using System.Collections.Generic; public class MyClass{ public class Employee:IComparable<Employee> { public int EmpID; public string YearsOfSvc = "1"; public Employee(int id) { EmpID = id; } public Employee(int id , string ys