笔记3

接下来,让我们来做点不同的事情吧,比如查询。

找个价格大于10美元的Product.

在1.0中可能这样写:

ArrayList products = Product.GetSampleProducts();
foreach (Product product in products)
{
if (product.Price > 10m)
{
Console.WriteLine(product);
}
}

很简单,是人就应该这样想。

看看2.0中的样子:

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

Action
<Product> print = delegate(Product p)
{ Console.WriteLine(p); };
matches.ForEach(print);

虽然书中大力宣扬这种做法相对于1.0是如何如何好,可我倒并不这样认为-相反,我倒认为问题有些更复杂化的嫌疑。

2.0的另外一种做法:

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

恩,比前一种做法感觉要好,虽然还是稍显复杂,却有了“一气呵成”的感觉…

看看3.0的做法吧

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

很简单吧,似乎一看就知道代码要干什么(用原文的话来说就是understand it without even thinking~)

我们似乎已经感觉到了变化:匿名方法让委托变得简单,而lambda表达式又变得更简洁,事物再向越来越美好的方向发展了~

需求是不断变更的,假如要是我们不知道某个Product的price到底有没有,那这种情况该如何解决呢?

posted @ 2010-03-27 12:51  Tmac_  阅读(112)  评论(0)    收藏  举报