深入IComparable与IComparer的排序实例详解
深入IComparable与IComparer的排序实例详解
发布时间:2016-12-28 来源:查字典编辑
摘要:如下所示:复制代码代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem....

如下所示:

复制代码 代码如下:

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#教程学习
编程开发子分类