实例-----(使用方法名,匿名的方法,Lambda表达式)------(转)

1.使用命名的方法:

场景:通用代码开发者想要创建一个通用的方法来筛选整型数组,但是这个通用方法要能够制定用来筛选该数组的的算法。

      首先,开发者必须声明一个委托delegate,该委托的设计原型就是收到一个int(整型)类型,如果在被筛选的数组中确实包含一个int类型,则这个委托将返回true。

创建一个工具类并添加了delegate和筛选方法,这个公共代码如下:

 1 public class Common
 2     {
 3         public delegate bool IntFilter(int i);
 4         public static int[] FilterArrayOfInts(int[] ints, IntFilter filter)
 5         {
 6             System.Collections.ArrayList aList = new System.Collections.ArrayList();
 7             foreach (int i in ints)
 8             {
 9                 if (filter(i))
10                 {
11                     aList.Add(i);
12                 }
13             }
14             return ((int[])aList.ToArray(typeof(int)));
15         }
16     }
View Code

以上FilterArrayOfInts 方法允许应用程序开发者将一个整型数组和一个delegate作为参数传递到筛选方法中,并将获得一个筛选后的数组。
现在,假定应用程序开发者只想筛选奇数,该方法在开发者的应用程序代码中进行了声明:

1 //应用程序开发者的筛选方法
2         public class APPlication
3         {
4             public static bool IsOdd(int i)
5             {
6                 returen(i & 1 == 1);
7             }
8         }
View Code

根据 FilterArrayOfInts 方法中的代码,传入数组中的每个 int 整形都会调用这个方法。如果传送的 int 整形数是奇数,则此筛选方法将只返回true。下面是使用示例:

 1 int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 2 
 3 int[] oddNums = Common.FilterArrayOfInts(nums, Application.IsOdd);
 4 
 5 foreach (int i in oddNums)
 6 
 7 {
 8 
 9     Console.WriteLine(i);
10 
11 }
View Code

请注意,要想将 delegate 传递为 FilterArrayOfInts 方法的第二个参数,应用程序开发者只需要传递该方法的名称。只需要简单的创建另一个筛选器,应用程序开发者可以筛选不同的数据。应用程序开发者还可以为偶数、素数,以及任何想要的规则创建筛选器。方法委托(delegate)可以通过这种方式成为具有很高可重用的代码。

2.使用匿名的方法

 1 int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 2 
 3 int[] oddNums = Common.FilterArrayOfInts(nums, delegate(int i) { return ((i & 1) == 1); });
 4 
 5 foreach (int i in oddNums)
 6 
 7 {
 8 
 9     Console.WriteLine(i);
10 
11 }
View Code

3,使用Lambda表达式

x => x.Length > 0

这个lambda表达式可以读做“x到x.Length>0”,或则读做“输入x返回x.Length > 0”。由于这个表达式的右边部分等于一个bool型值,则 delegate 应该指定该方法将返回一个bool型值,否则将会编译错误。

 1 int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 2 
 3 int[] oddNums = Common.FilterArrayOfInts(nums, i => ((i & 1) == 1));
 4 
 5 foreach (int i in oddNums)
 6 {
 7     Console.WriteLine(i);
 8 
 9 }<br><span style="font-size: 16px;"><strong><span style="color: rgb(255, 0, 0);">总结如下:</span></strong></span> 
10 
11 
12 int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
13 
14 //1.使用命名方法
15 
16 int[] oddNums = Common.FilterArrayOfInts(nums, Application.IsOdd);
17 
18 //2.使用匿名方法
19 
20 int[] oddNums = Common.FilterArrayOfInts(nums
21 
22     , delegate(int i) { return ((i & 1) == 1); });
23 
24 //3.使用lambda表达式
25 
26 int[] oddNums = Common.FilterArrayOfInts(nums, i => ((i & 1) == 1)); 
View Code

 

如果使用 lambda 表达式,则上面的实例可以写成这样:

posted @ 2013-11-28 14:28  行进  阅读(183)  评论(0编辑  收藏  举报