深入IComparable与IComparer的排序实例详解

 更新时间:2013年06月09日 10:09:16   作者:  
本篇文章是对IComparable与IComparer的排序实例进行了详细的分析介绍,需要的朋友参考下
如下所示:
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace hgoApp
{
    class Comparer
    {
        static void Main()
        {
            Employee[] Employees = new Employee[5];

            Employees[0] = new Employee("张三", 2800);
            Employees[1] = new Employee("李四", 1800);
            Employees[2] = new Employee("王五", 5800);
            Employees[3] = new Employee("马六", 12800);
            Employees[4] = new Employee("钱七", 8800);
            Console.WriteLine("按照姓名排序");
            Array.Sort(Employees);
            foreach (Employee em in Employees)
            {
                Console.WriteLine(em);
            }
            Console.WriteLine("按照薪水排序");
            Array.Sort(Employees, Employee.SalaryCom);
            foreach (Employee em in Employees)
            {
                Console.WriteLine(em);
            }
        }
    }
    class Employee : IComparable
    {
        private string _Name;
        public string Name
        {
            get { return _Name; }
        }
        private int _Salary;
        public int Salary
        {
            get { return _Salary; }
        }
        public Employee(string Name, int Salary)
        {
            _Name = Name;
            _Salary = Salary;
        }
        //显示接口实现
        int IComparable.CompareTo(object obj)
        {
            if (!(obj is Employee))
            {
                throw new ArgumentException("不是Employee类");
            }
            return _Name.CompareTo(((Employee)obj)._Name);
        }
        //提供一个公用的强类型重载版本
        public int CompareTo(Employee Em)
        {
            return _Name.CompareTo(Em._Name);
        }
        //当第一次实例化Employee的时候,_SalaryCom为空,当使用SalaryCom时,就会创建一个SalaryCompare对象,第2次,3次的时候,就可以直接使用_SalaryCom了
        private static SalaryCompare _SalaryCom = null;
        public static IComparer SalaryCom
        {
            get
            {
                if (_SalaryCom == null)
                {
                    _SalaryCom = new SalaryCompare();
                }
                return _SalaryCom;
            }
        }
        //嵌套类(这个类是针对薪水进行排序的类)
        private class SalaryCompare:IComparer
        {
            //使用指定的IComparer对Array中的元素进行排序
            int IComparer.Compare(object obj1,object obj2)
            {
                if (!(obj1 is Employee) || !(obj2 is Employee))
                {
                    throw new ArgumentException("不是Employee类");
                }
                return ((Employee)obj1)._Salary.CompareTo(((Employee)obj2)._Salary);
            }
        }
        public override string ToString()
        {
            return _Name +"  "+ _Salary.ToString();
        }
    }
}

相关文章

  • c# 匿名方法的小例子

    c# 匿名方法的小例子

    c# 匿名方法的小例子,需要的朋友可以参考一下
    2013-04-04
  • C#中Override关键字和New关键字的用法详解

    C#中Override关键字和New关键字的用法详解

    这篇文章主要介绍了C#中Override关键字和New关键字的用法,需要的朋友可以参考下
    2016-01-01
  • Linq两个List集合取交集的实现

    Linq两个List集合取交集的实现

    这篇文章主要介绍了Linq两个List集合取交集的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • C#将异步改成同步方法示例

    C#将异步改成同步方法示例

    这篇文章主要为大家介绍了C#将异步改成同步方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • C# SQLite序列操作实现方法详解

    C# SQLite序列操作实现方法详解

    这篇文章主要介绍了C# SQLite序列操作实现方法,结合实例形式详细分析了C#实现SQLite序列操作的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • C#中WPF依赖属性的正确学习方法

    C#中WPF依赖属性的正确学习方法

    这篇文章主要介绍了C#中WPF依赖属性的正确学习方法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 教你C#将CSV转为Excel的实现方法

    教你C#将CSV转为Excel的实现方法

    这篇文章主要介绍了C# 将CSV转为Excel,转换之后可执行更多关于数据编辑、格式设置等操作,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-03-03
  • C#使用XmlDocument或XDocument创建xml文件

    C#使用XmlDocument或XDocument创建xml文件

    这篇文章主要为大家详细介绍了C#使用XmlDocument或XDocument创建xml文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • C#计算程序执行过程花费时间的方法

    C#计算程序执行过程花费时间的方法

    这篇文章主要介绍了C#计算程序执行过程花费时间的方法,涉及C#简单的时间运算技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Unity3D基于UGUI实现虚拟摇杆

    Unity3D基于UGUI实现虚拟摇杆

    这篇文章主要为大家详细介绍了Unity3D基于UGUI实现虚拟摇杆,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论