手机
当前位置:查字典教程网 >编程开发 >C#教程 >深入IComparable与IComparer的排序实例详解
深入IComparable与IComparer的排序实例详解
摘要:如下所示:复制代码代码如下: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();

}

}

}

【深入IComparable与IComparer的排序实例详解】相关文章:

c# 获得局域网主机列表实例

解析在内部循环中Continue外部循环的使用详解

C# 图片剪切与缩小的实例

C# 汉字转化拼音的简单实例代码

深入多线程之:Reader与Write Locks(读写锁)的使用详解

基于params,ref,out的参数问题详解

深入理解C#序列化与反序列化的详解

深入c#工厂模式的详解

深入C#中使用SqlDbType.Xml类型参数的使用详解

深入c# Func委托的详解

精品推荐
分类导航