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;
}
}