【第一章】C#的进化史——C#1.0,2.0,3.0区别比较(三)——查询集合

本次任务为查找列表中符合特定条件的所有元素,即找出价格高于$10的产品


C#1.0 

需要循环,测试和打印,代码如下:

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

代码很简洁,但3个任务纠缠依赖性不好。

原话如下:请注意3个任务是如何纠缠在一起的:用foreach进行循环,用if测试条件,再用Console.WriteLine显示产品,这3个任务的依赖性一目了然,看看它们是如何嵌套的就明白了。


C#2.0 的代码如下:

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

            List<Product> mathes = products.FindAll(test);

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

代码复杂了很多,但也强大了很多,可以非常轻松地更改测试条件并对每个匹配项采取单独的操作。

涉及的委托变量(test和print)可以传递给一个方法——相同的方法可以用于测试完全不同的条件以及执行完全不同的操作。

【完全不解,此处何意。。。】

2.0代码亦可优化,如下:

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

代码简洁了很多,但delegate(Product  P)还是很碍事,大括号也是,有损可读性,


C# 3.0 代码如下:

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

采用Lambda表达式来测试。

灵活性以及可读性很好。




本次涉及到不熟悉的知识点:

1、Predicate<Product> :表示定义一组条件并确定指定对象是否符合这些条件的方法;

2、products.FindAll(test):检索与指定谓词定义的条件匹配的所有元素

3、Action<Product>:封装一个方法,该方法只采用一个参数并且不返回值

4、mathes.ForEach(print):对List<Product>的每个元素进行指定操作。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值