cuclife.com > IT > C# > 0

详细解释c# Lambda表达式讲解

网络整理 - 06-27

理解Lambda表达式

Lambda表达式是.NET Framework 3.5引入的另一个新特性,它提供了一种极其简洁的定义方法的方式。

假设你希望将Click事件处理器正确地绑定到button控件,代码清单18-6所示为其中一种方法。

代码清单 18-6 LanguageChanges\NormalMethod.aspx

-//W3C//DTD XHTML . Transitional//EN” “=”server> void Page_Init() { btn.Click += new EventHandler(btn_Click); } void btn_Click(object sender, EventArgs e) { lblResult.Text = DateTime.Now.ToString(); } =”=”Normal Method=”=”=”

在代码清单18-6中,Page_Init()方法将btn_Click()方法绑定到Button的Click事件。当点击按钮时,执行btn_Click()方法,显示当前日期和时间。这没什么特别之处。

.NET Framework 2.0引入了匿名方法的概念,其好处是可以声明内联方法。例如,代码清单18-7的功能与上例相同,所不同的是使用了匿名方法来处理Button的Click事件。

代码清单 18-7 LanguageChanges\AnonymousMethod.aspx

-//W3C//DTD XHTML . Transitional//EN” “=”server> void Page_Init() { btn.Click += delegate(object sender, EventArgs e) { lblResult.Text = DateTime.Now.ToString(); }; } =”=”Anonymous Method=”=”=”

在代码清单18-7中,处理Click事件的方法是在Page_Init()方法之中声明的。

注意:VB.NET并不支持匿名方法,但它支持Lambda表达式,所以VB.NET使用者请不要跳过。

Lambda表达式将匿名方法的概念更进一步,它将声明一个方法所必需的语法数量降到了最低。代码清单18-8使用了Lambda表达式,它功能与以上两个例子相同。

代码清单 18-8 LanguageChanges\LambdaExpression.aspx

-//W3C//DTD XHTML . Transitional//EN” “=”server> void Page_Init() { btn.Click += (sender, e) => lblResult.Text = DateTime.Now.ToString(); } =”=”Lambda Expressions=”=”=”

代码清单18-8中的Lambda表达式如下,

(sender, e) => lblResult.Text = DateTime.Now.ToString();

这仅仅是编写方法的简洁方式。Lambda表达式使用=>操作符(goes into操作符)来分隔方法的参数列表和方法体。编译器(通常)可以推断出参数的数据类型。尽管如此,如果你愿意,还是可以像下面的代码那样指明参数类型,

(object sender, EventArgs e) => lblResult.Text = DateTime.Now.ToString();

有必要提一下,当方法只有一个参数时,圆括号是可选的。因此,Lambda表达式可以非常简洁。

Visual Basic也支持Lambda表达式,但多了一些限制。Visual Basic中的Lambda表达式中只能包含表达式,不能包含语句。

VB中创建Lambda表达式的语法如下,

Dim AddNumbers = Function(x, y) x + y

Response.Write(AddNumbers(5, 6))

第一条语句创建了一个名为AddNumbers的变量,这即为一个Lambda表达式。VB语法Function(x, y) x + y相当于C#语法(x, y) => x + y。第二条语句使用两个参数调用Lambda表达式。

c# Lambda表达式讲解