代码改变世界

C#3.0-Lambda表达式

2011-04-04 18:44  杨延成  阅读(565)  评论(0编辑  收藏  举报
Lambda表达式是一个匿名方法,他可以包含一个表达式或者语句块,他能够创造委托或表达式树类型。

1 //Demo -带一个参数的Lambda表达式
2 namespace TestLambda
3 {
4 //声明一个委托,包含一个int型参数
5 delegate int del(int n);
6
7 public class MyLambda
8 {
9 public int TestMethod(int n)
10 {
11 ///利用Lambda表达式构造一个委托
12 /// x => x * x 表达式表示一个方法此方法等同于
13 /// public int MethodName(int x)
14 /// {
15 /// return x*x;
16 /// }
17 /// 由此可以看出,=>左边x表示匿名方法的参数,右边 x*x 表示方法体
18 /// 这行代码可以总结为:实例化一个委托,此委托是用计算传入整型参数的平方
19 /// 如果将Lambda表达式改变为一个方法的话,则以下这行代码可以替换
20 /// del myDel=new del(MethodName);
21 del myDel = x => x * x;
22
23 ///调用委托,实质调用Lambda表达式进行计算
24 int result = myDel(n);
25 return result;
26 }
27
28
29 }
30 class Program
31 {
32 static void Main(string[] args)
33 {
34 MyLambda my = new MyLambda();
35 ///测试Lambda表达式
36 int result = my.TestMethod(10);
37 Console.WriteLine(result);
38 ///输出结果为:100
39
40 }
41
42 }
43 }
44
45 //Demo2--带两个参数的及不带任何参数的Lambda表达式
46 namespace TestLambda
47 {
48
49 ///
50 /// 声明一个委托,包含两个int型参数
51 ///
52 ///
53 ///
54 ///
55 delegate int del(int n,int m);
56
57 ///
58 /// 不带参数的委托
59 ///
60 ///
61 delegate int delNoPar();
62
63
64
65 public class MyLambda
66 {
67 public int TestMethod(int n,int m)
68 {
69 ///利用Lambda表达式构造一个委托
70 ///Lambda表达式的参数x,y不需要事先声明,也可以不指明类型,当然也可以指明
71 ///如:(int x,int y)=>x*y;
72 ///完整的表达式是:del myDel=(int x,int y)=>x*y;
73
74 del myDel = (x,y)=> x * y;
75
76 ///不带任何参数的Lambda表达式
77 ///利用()来表示空参
78 ///这行代码表示:要返回10*5的值
79 delNoPar testDel = () => 10 * 5;
80 Console.WriteLine(testDel());
81
82 ///调用委托,实质调用Lambda表达式进行计算
83 int result = myDel(n,m);
84 return result;
85 }
86
87
88 }
89 class Program
90 {
91 static void Main(string[] args)
92 {
93 MyLambda my = new MyLambda();
94 ///测试Lambda表达式
95 int result = my.TestMethod(10,3);
96 Console.WriteLine(result);
97
98 }
99
100 }
101 }

总结:
1.Lambda表达式,是匿名方法的一个替代,但是更加灵活
2.Lambda表达式,可以包含参数,也可以不包含,不包含时要用()表示
3.Lambda表达式参数可以显示指明类型,也可以不指定,由程序自动分析获得参数类型