深入理解C#(二)

*第一章(大致了解C#各个版本的特性:排序和过滤)

按字母顺序打印产品列表

按名称排序,找出最贵的产品
这里只摘录C# 3的实现方法

Lambda表达式使用Comparison进行排序

1
2
3
4
5
6
List<Product> products=Product.GetSampleProducts();	
products.Sort((x,y)=>x.Name.CompareTo(y));
foreach(Product product in products)
{
Console.WriteLine(product);
}

使用一个扩展方法对List进行排序

1
2
3
4
5
List<Product> products=Product.GetSampleProducts();
foreach(Product product in products.OrderBy(p=>p.Name))
{
Console.WriteLine(product);
}

查询集合

C# 1

需要循环,测试每个元素,操作符合条件的元素(这里是打印元素)

C# 2

测试和打印分开

1
2
3
4
5
6
7
List<Product> products=Product.GetSampleProducts();

Predicate<Product> test=delegate(Product p) { return p.Price>10m;};
List<Product> matches=products.FinaAll(test);

Action<Product> print=Console.WriteLine;
matces.ForEach(print);

用FinaAll和ForEach分解问题
另一个版本:

1
2
3
List<Product> products=Product.GetSampleProducts();
products.FindAll(delegate(Product p){return p.Price>10;}}.
.ForEach(Console.WriteLine);

C# 3

用Lambda表达式来测试

1
2
3
4
5
List<Product> products=Product.GetSampleProducts();
foreach(Product product in products.Where(p=>p.Price>10))
{
Console.WriteLine(product);
}

小结

  1. C# 1,传统方法
  2. C# 2, 匿名方法:有助于问题的分离性(将测试和打印分开)
  3. C# 3, Lambda表达式:增强了可读性