标签:std 实体 public 四种 都差不多 重新定义 book size dso
本例通过返回一个无序的Book类型的List,实现了按照书本名称排序并输出的四种实现方式。
书本实体类列表的实现
public class Books{
public string Name{get; set;}
public decimal Price{get; set;}
public Books(string Name, decimal Price){
this.Name = Name;
this.Price = Price;
}
public static List<Books> GetBooksList(){
return new List<Books>{
new Books(Name: "Think In Java", Price: 108.00m),
new Books(Name: "Python Core", Price: 89.00m),
new Books(Name: "C# in Depth", Price: 99.00m),
new Books(Name: "Java 8 In Action", Price: 79.00m)
};
}
public override string ToString(){
return string.Format("{0}, {1}", Name, Price);
}
}
传统的实现方式
传统的开发中,一般提供一个IComparer的实现来定义排序顺序
class BooksNameCompare : IComparer<Books> {
public int Compare(Books x, Books y){
return x.Name.CompareTo(y.Name);
}
}
// 实现方法
List<Books> listOldSort = Books.GetBooksList();
listOldSort.Sort(new BooksNameCompare());
foreach(Books p in listOldSort) {
Console.WriteLine(p.ToString());
}
这种实现方法,我觉得最大的问题是太繁琐。例如今后如果要实现根据价格排序,还需要重新定义一种排序。
通过代理的方式实现排序
List<Books> listDelegateSort = Books.GetBooksList();
listDelegateSort.Sort(delegate (Books x, Books y) {
return x.Name.CompareTo(y.Name);
});
foreach(Books p in listDelegateSort) {
Console.WriteLine(p.ToString());
}
通过Lambda表达式来实现排序
List<Books> listLambdaSort = Books.GetBooksList();
listLambdaSort.Sort((x, y) => x.Name.CompareTo(y.Name));
foreach(Books p in listLambdaSort) {
Console.WriteLine(p.ToString());
}
使用LINQ实现排序输出
List<Books> listExpandSort = Books.GetBooksList();
foreach(Books p in listExpandSort.OrderBy(p => p.Name)) {
Console.WriteLine(p.ToString());
}
OrderBy是一个扩展方法,需要在首部using System.Linq;才能实现这种排序方式。
结束
以上的代码在.net core 2.1环境下运行通过。实现的话我觉得大家都差不多,个人认为第二种方式和第三种方式可读性更好点。
标签:std 实体 public 四种 都差不多 重新定义 book size dso
原文地址:https://www.cnblogs.com/microyum/p/9738953.html