類別信息:IComparable
{
public int Id { get設置;}
公共字符串名稱{ get設置;}
public int CompareTo(object obj) {
int結果;
嘗試
{
Info info = obj as Info
如果(這個。Id & gt信息。Id)
{
結果= 0;
}
其他
結果= 1;
返回結果;
}
catch(Exception ex){ throw new Exception(ex。消息);}
}
}
調用方式如下,只是使用sort方法對列表進行排序。
私有靜態void readaccounting compare(){
列表& ltInfo & gtinfoList =新列表& ltInfo & gt();
信息列表。添加(
new Info() { Id = 1,Name = " ABC " });
信息列表。Add(new Info() { Id = 3,Name = " rose " });
信息列表。Add(new Info() { Id = 2,Name = " woft " });
信息列表。sort();
foreach(信息列表中的變量項)
{
控制臺。WriteLine(項目。Id + ":" +項目。姓名);
}
}
第二種方法:linq to list進行排序。
使用linq對列表進行排序,定義實體類時不需要實現IComparable接口。調用方法如下:
私有靜態void ReadT(string str) {
列表& ltInfo & gtinfoList =新列表& ltInfo & gt();
信息列表。添加(
new Info() { Id = 1,Name = " woft " });
信息列表。Add(new Info() { Id=3,Name = " rose " });
信息列表。Add(new Info() { Id = 2,Name = " ABC " });
控制臺。WriteLine(" ReadT * * * * * * * * * * * * * * * * * * ");
IEnumerable & ltInfo & gtquery = null
query =來自信息列表中的項目orderby項目。Id選擇項目;
foreach(查詢中的變量項)
{
控制臺。WriteLine(項目。id+":"+項目。姓名);
}
}
但是以上兩種方法只能對壹個實體屬性進行排序,如果對不同的屬性進行排序,只能寫很多if來判斷,很麻煩。並看下面的方式實現根據傳入參數排序。
私有靜態空列表排序(字符串字段,字符串規則)
{
如果(!字符串。IsNullOrEmpty(規則)& amp& amp(!規則。ToLower()。Equals("desc")||!規則。ToLower()。Equals("asc ")))
{
嘗試
{
列表& ltInfo & gtinfoList = GetList();
信息列表。排序(
委托人(信息info1,信息info2)
{
鍵入t1 = info1。GetType();
類型t2 = info2。GetType();
property info pro 1 = t 1。GetProperty(字段);
屬性信息pro2 = t2。GetProperty(字段);
退貨規則。ToLower()。等於(“asc”)?
pro1。GetValue(info1,null)。ToString()。CompareTo(pro2。GetValue(info2,null)。ToString()):
pro2。GetValue(info2,null)。ToString()。CompareTo(pro1。GetValue(info1,null)。ToString());
});
控制臺。WriteLine(" * * * * * * list sort * * * * * * * *);
foreach(信息列表中的變量項)
{
控制臺。WriteLine(項目。Id +","+項。姓名);
}
}
catch(例外ex)
{
控制臺。WriteLine(例如。消息);
}
}控制臺。WriteLine("ruls是錯的");
}
通話模式:
ListSort("名字"," desc ");//表示desc對名稱進行排序。
ListSort("Id "," ASC ");//表示按asc對Id進行排序。如果參數很多,這就減少了很多判斷。