List<T>類可以使用Sort()方法對元素排序。
Sort()方法定義了幾個重載方法,分別是
public void List<T>.Sort(),不帶有任何參數的Sort方法
public void List<T>.Sort(Comparison<T>),帶有比較代理方法參數的Sort方法
public void List<T>.Sort(IComparer<T>), 帶有比較子參數的Sort方法
public void List<T>.Sort(Int32,Int32,IComparer<T>),帶有比較起參數,可以指定排序範圍的Sort方法
首先介紹第一種方法:public void List<T>.Sort(),使用這種方法不是對List中的任何元素對象都可以進行排序,List中的元素對象必須繼承IComparable介面,並且要實現IComparable介面中的CompareTo()方法,在CompareTo()方法中要自己實現對象的比較規則。
int CompareTo(Object obj)
參數obj
-
類型:System.Object
與此執行個體進行比較的對象。
傳回值
類型:System.Int32
一個值,指示要比較的對象的相對順序。傳回值的含義如下:
值 |
含義 |
小於零 |
此執行個體按排序次序在 obj 前面。 |
零 |
此執行個體與 obj 在排序次序中出現的位置相同。 |
大於零 |
此執行個體按排序次序在 obj 後面。 |
詳細可以參照如下代碼:
/// <summary>/// 單位科目公式的實體類/// </summary>public class AccountFormular:IComparable{ /// <summary> /// 公司Id /// </summary> private string companyId; public string CompanyId { get { return this.companyId; } set { this.companyId = value; } } /// <summary> /// 科目名稱 /// </summary> private string accountName; public string AccountName { get { return this.accountName; } set { this.accountName = value; } } /// <summary> /// 預算年份 /// </summary> private int budgetYear; public int BudgetYear { get { return this.budgetYear; } set { this.budgetYear = value; } } /// <summary> /// 預算公式 /// </summary> private string formular; public string Formular { get { return this.formular; } set { this.formular = value; } } public int CompareTo(object obj) { int flg = 0; try { AccountFormular sObj = (AccountFormular)obj; flg = this.AccountName.CompareTo(sObj.AccountName); //先按照“科目名稱”進行排序 if (flg == 0) //如果科目名稱相同,再按照“預算年份”的大小進行排序 { if (this.BudgetYear > sObj.BudgetYear) { flg = 1; } else if (this.BudgetYear < sObj.BudgetYear) { flg = -1; } } } catch (Exception ex) { throw new Exception("比較異常", ex.InnerException); } return flg; }}