C#语言各个版本特性(三)

三、查询集合

1.找出List<Product>列表中符合特定条件的所有元素

C#1.1 查询步骤:循环,if判断,打印

product类

 1 using System.Collections;
 2 using System.ComponentModel;
 3
 4 namespace Chapter01.CSharp1
 5 {
 6     [Description("Listing 1.01")]
 7     public class Product
 8     {
 9         string name;
10         public string Name
11         {
12             get { return name; }
13         }
14
15         decimal price;
16         public decimal Price
17         {
18             get { return price; }
19         }
20
21         public Product(string name, decimal price)
22         {
23             this.name = name;
24             this.price = price;
25         }
26
27         public static ArrayList GetSampleProducts()
28         {
29             ArrayList list = new ArrayList();
30             list.Add(new Product("West Side Story", 9.99m));
31             list.Add(new Product("Assassins", 14.99m));
32             list.Add(new Product("Frogs", 13.99m));
33             list.Add(new Product("Sweeney Todd", 10.99m));
34             return list;
35         }
36
37         public override string ToString()
38         {
39             return string.Format("{0}: {1}", name, price);
40         }
41     }
42 }

ArrayListQuery类

 1 using System;
 2 using System.Collections;
 3 using System.ComponentModel;
 4
 5 namespace Chapter01.CSharp1
 6 {
 7     [Description("Listing 1.10")]
 8     class ArrayListQuery
 9     {
10         static void Main()
11         {
12             ArrayList products = Product.GetSampleProducts();
13             foreach (Product product in products)
14             {
15                 if (product.Price > 10m)
16                 {
17                     Console.WriteLine(product);
18                 }
19             }
20         }
21     }
22 }

2.测试和打印分开

C#2.0

product类

 1 using System.Collections.Generic;
 2 using System.ComponentModel;
 3
 4 namespace Chapter01.CSharp2
 5 {
 6     [Description("Listing 1.02")]
 7     public class Product
 8     {
 9         string name;
10         public string Name
11         {
12             get { return name; }
13             private set { name = value; }
14         }
15
16         decimal price;
17         public decimal Price
18         {
19             get { return price; }
20             private set { price = value; }
21         }
22
23         public Product(string name, decimal price)
24         {
25             Name = name;
26             Price = price;
27         }
28
29         public static List<Product> GetSampleProducts()
30         {
31             List<Product> list = new List<Product>();
32             list.Add(new Product("West Side Story", 9.99m));
33             list.Add(new Product("Assassins", 14.99m));
34             list.Add(new Product("Frogs", 13.99m));
35             list.Add(new Product("Sweeney Todd", 10.99m));
36             return list;
37         }
38
39         public override string ToString()
40         {
41             return string.Format("{0}: {1}", name, price);
42         }
43     }
44 }

ListQueryWithDelegates类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4
 5 namespace Chapter01.CSharp2
 6 {
 7     [Description("Listing 1.11")]
 8     class ListQueryWithDelegates
 9     {
10         static void Main()
11         {
12             List<Product> products = Product.GetSampleProducts();
13             Predicate<Product> test = delegate(Product p)
14                 { return p.Price > 10m; };
15             List<Product> matches = products.FindAll(test);
16
17             Action<Product> print = Console.WriteLine;
18             matches.ForEach(print);
19         }
20     }
21 }

变量test的初始化使用了匿名方法,而print变量的初始化使用了方法组转换,它简化了从现有方法创建委托的过程。不仅简单而且强大!

ListQueryWithDelegatesCompact类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4
 5 namespace Chapter01.CSharp2
 6 {
 7     [Description("Listing 1.12")]
 8     class ListQueryWithDelegatesCompact
 9     {
10         static void Main()
11         {
12             List<Product> products = Product.GetSampleProducts();
13             products.FindAll(delegate(Product p) { return p.Price > 10; })
14                     .ForEach(delegate(Product p) { Console.WriteLine(p); });
15         }
16     }
17 }

3.用lambda表达式来测试

C#3.0

product

 1 using System.Collections.Generic;
 2 using System.ComponentModel;
 3
 4 namespace Chapter01.CSharp3
 5 {
 6     [Description("Listing 1.3")]
 7     class Product
 8     {
 9         public string Name { get; private set; }
10         public decimal Price { get; private set; }
11
12         public Product(string name, decimal price)
13         {
14             Name = name;
15             Price = price;
16         }
17
18         Product()
19         {
20         }
21
22         public static List<Product> GetSampleProducts()
23         {
24             return new List<Product>
25             {
26                 new Product { Name="West Side Story", Price = 9.99m },
27                 new Product { Name="Assassins", Price=14.99m },
28                 new Product { Name="Frogs", Price=13.99m },
29                 new Product { Name="Sweeney Todd", Price=10.99m}
30             };
31         }
32
33         public override string ToString()
34         {
35             return string.Format("{0}: {1}", Name, Price);
36         }
37     }
38 }

ListQueryWithLambdaExpression类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Linq;
 5
 6 namespace Chapter01.CSharp3
 7 {
 8     [Description("Listing 1.13")]
 9     class ListQueryWithLambdaExpression
10     {
11         static void Main()
12         {
13             List<Product> products = Product.GetSampleProducts();
14             foreach (Product product in products.Where(p => p.Price > 10))
15             {
16                 Console.WriteLine(product);
17             }
18         }
19     }
20 }

总结:

→C#1,条件和操作紧密耦合两者都是硬编码的

→C#2,条件和操作分开,匿名方法使委托变得简单(匿名方法有助于问题的可分离性)

→C#3Lambda表达式使条件变得更容易阅读(Lambda表达式增强了可读性)。

原文地址:https://www.cnblogs.com/csxukang/p/9290854.html

时间: 2024-10-13 10:08:46

C#语言各个版本特性(三)的相关文章

C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)

历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持.微软将C#提交给标准组织ECMA,C# 5.0目前是ECMA发布的最新规范,C# 6.0还是草案阶段,C# 7.1是微软当前提供的最新规范. 这里仅仅列个提纲,由于C# 5.0是具有ECMA标准规范的版本,所以选择C# 5.0作为主要版本学习,并专题学习C# 6.0,7.0版本新特性. C#语言规范GitHub库参见:https://github.com/

C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持.微软将C#提交给标准组织ECMA,C# 5.0目前是ECMA发布的最新规范,C# 6.0还是草案阶段,C# 7.1是微软当前提供的最新规范. 这里仅仅列个提纲,由于C# 5.0是具有ECMA标准规范的版本,所以选择C# 5.0作为主要版本学习,并专题学习C# 6.0,7.0版本新特性. C#语言规范GitHub库参见:https://github.com/

Go语言开发(十三)、Go语言常用标准库三

Go语言开发(十三).Go语言常用标准库三 一.sync 1.sync简介 sync提供基本的同步原语,如sync.Mutex,sync.RWMutex,sync.Once,sync.Cond,sync.Waitgroup,除了Once和WaitGroup类型外,大多数类型都供低级库使用.Go语言中,不要通过共享内存通信,而要通过通信共享内存,通过Channel和沟通可以更好地完成更高级别的同步. type Locker interface { Lock() Unlock() } Locker提

如何在Visual studio中修改所使用C#语言的版本

有时候,我们需要在Visual studio里修改当前使用的C#语言的版本,具体修改方法如下:在solution explorer中右键工程->选择属性->切换到Build页->点击'Advanced...'按钮->在弹出的Advanced Build Settings对话框中从Lanuage Version下拉列表框中选择你需要的C#语言版本,请参照下列图示.此外不同版本的VS默认的C#版本如下: Visual Studio 2015: C# 6.0 Visual Studio

C语言基础课程 第三课 ADB(Android Debug Bridge)的使用

?? C语言基础课程 第三课 ADB(Android Debug Bridge)的使用 由于前面已经发布过Linux的博客了 基础班将Linux基础命令就不单独发表博客了,本节课主要就是利用adb连接手机进行一个Linux基本命令的复习.而且熟悉手机的底层运作,不用界面操作照样也能安装软件  卸载软件与pc传数据 目  录 1       将android设备通过USB连接到PC. 3 2       查看当前设备... 3 3       进入设备shell. 4 4       执行shel

C#各版本特性

C#2.0 泛型,可空类型,匿名方法,更方便的委托,迭代器,分布类型,静态类,包含不同访问修饰符的属性的取值和赋值方法,命名空间别名,pragma指令,固定大小的缓冲器. C#3.0 LINQ,自动属性,var,对象和集合的初始化器,匿名类型,Lambda表达式,扩展方法 C#4.0 可选参数,命名参数,更好的COM交互,泛型的逆变与协变,动态类型 C#5.0 async,await C#6.0 ...... C#各版本特性,布布扣,bubuko.com

【C语言天天练(三)】函数

对于程序来讲,函数的地位是不言而喻的.下面先给出函数的定义,然后根据定义分析C语言中的函数. 函数定义: 类型 函数名(形式参数) 代码块 由定义可以看出函数主要包括四部分:函数类型.函数名.函数形参.函数代码块. 函数类型:指明了函数返回值的类型,是整数.浮点数.指针甚至是结构体等等.需要注意的两点:1.如果类型是void,则没有返回值.如果是void *型的返回值,那可以返回任意类型的指针,这是ANSI C标准定义的,void *可以是任意类型的指针.2.返回值的类型应该与函数定义的类型相同

go语言最新版本 下载地址

国内官方网站无法打开.放在了百度云中,定期会更新: 链接:http://pan.baidu.com/s/1dD59duh 密码:46ek 备用地址:http://pan.baidu.com/s/1hq1mrDM go语言最新版本:1.5.1. 19 August 2015.

数据结构与问题求解-Java语言描述(第三版)

数据结构对程序的重要性不言而喻,用java语言来实现常见的一些数据结构,以及在相应数据结构上的操作对学习java的同学来说是必须掌握的. 本系列博文参考<数据结构与问题求解-Java语言描述(第三版)>来实现 在自己学习的过程中,更希望有机会与大家交流. PS :本人是菜鸟,只是用博客的方式激励自己.请轻喷.Fighting!