说明(2017-7-24 19:15:15):
1. 百度文库里的一篇文章,觉得讲的比较好。原文地址:https://wenku.baidu.com/view/b53cd250ad02de80d4d84073.html
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _04IComparer示例 { //class Program //{ // static void Main(string[] args) // { // } //} //c#如何使用IComparer子类的Sort排序方法 //泛型的排序有3种方法,分别是: //1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用 //2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有 2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序; //3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法 //这里介绍第三种方法: //首先定义一个类,用作集合的元素 /// <summary> /// 学生类 /// </summary> public class Student { private string name; // 姓名 public string Name { get { return name; } set { name = value; } } private int age; // 年龄 public int Age { get { return age; } set { age = value; } } private string grade; // 年级 public string Grade { get { return grade; } set { grade = value; } } //构造函数 public Student(string name, int age, string grade) { this.name = name; this.age = age; this.grade = grade; } public override string ToString() { return this.name + "," + this.age.ToString() + "," + this.grade; } } //接着定义一个用于比较的类,实现IComparer<T>泛型接口: public class StudentComparer : IComparer<Student> { public enum CompareType { Name, Age, Grade } private CompareType type; // 构造函数,根据type的值,判断按哪个字段排序 public StudentComparer(CompareType type) { this.type = type; } #region IComparer<Student> 成员 public int Compare(Student x, Student y) { switch (this.type) { case CompareType.Name: return x.Name.CompareTo(y.Name); case CompareType.Age: return x.Age.CompareTo(y.Age); default://case CompareType.Grade: return x.Grade.CompareTo(y.Grade); } } #endregion } //下面就开始排序了: public class test { public static void Main() { List<Student> arr = new List<Student>(); arr.Add(new Student("张三", 7, "一年级")); arr.Add(new Student("李四", 11, "二年级")); arr.Add(new Student("王五", 21, "一年级")); arr.Add(new Student("陈六", 8, "三年级")); arr.Add(new Student("刘七", 15, "二年级")); // 调用Sort方法,实现按年龄排序 arr.Sort(new StudentComparer(StudentComparer.CompareType.Age)); // 循环显示集合里的元素 foreach (Student item in arr) Console.WriteLine(item.ToString()); Console.WriteLine("---------------------"); // 调用Sort方法,实现按姓名排序 arr.Sort(new StudentComparer(StudentComparer.CompareType.Name)); // 循环显示集合里的元素 foreach (Student item in arr) Console.WriteLine(item.ToString()); Console.ReadKey(); } } }