IT技术学习网
IT技术学习网
您的位置: 主页 > 编程技术 > c# >

c# Lambda表达式讲解

2014-12-27 18:53 来源: 整理 阅读:

理解Lambda表达式

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

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

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

<%@ Page Language=”C#” %>
<!DOCTYPE html PUBLIC-//W3C//DTD XHTML . Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<script runat=”server>
void Page_Init()
{
btn.Click += new EventHandler(btn_Click);
}
void btn_Click(object sender, EventArgs e)
{
lblResult.Text = DateTime.Now.ToString();
}
</script>
<html xmlns=”http://www.w3.org//xhtml>
<head runat=”server>
<title>Normal Method</title>
</head>
<body>
<form id=”form1runat=”server>
<div>
<asp:Button id=”btnText=”Go!” Runat=”server/>
<asp:Label id=”lblResultRunat=”server/>
</div>
</form>
</body>
</html>

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

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

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

<%@ Page Language=”C#” %>
<!DOCTYPE html PUBLIC-//W3C//DTD XHTML . Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<script runat=”server>
void Page_Init()
{
btn.Click += delegate(object sender, EventArgs e)
{
lblResult.Text = DateTime.Now.ToString();
};
}
</script>
<html xmlns=”http://www.w3.org//xhtml>
<head id=”Head1runat=”server>
<title>Anonymous Method</title>
</head>
<body>
<form id=”form1runat=”server>
<div>
<asp:Button id=”btnText=”Go!”Runat=”server/>
<asp:Label id=”lblResultRunat=”server/>
</div>
</form>
</body>
</html>

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

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

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

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

<%@ Page Language=”C#” %>
<!DOCTYPE html PUBLIC-//W3C//DTD XHTML . Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<script runat=”server>
void Page_Init()
{
btn.Click += (sender, e) => lblResult.Text = DateTime.Now.ToString();
}
</script>
<html xmlns=”http://www.w3.org//xhtml>
<head id=”Head1runat=”server>
<title>Lambda Expressions</title>
</head>
<body>
<form id=”form1runat=”server>
<div>
<asp:Button id=”btnText=”Go!”Runat=”server/>
<asp:Label id=”lblResultRunat=”server/>
</div>
</form>
</body>
</html>

代码清单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表达式讲解
转载需注明出处:IT技术学习网 http://www.itjsxx.com/csharp/Lambda_jiangjie.html

评论文章 c# Lambda表达式讲解
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
IT技术学习网 - 关于我们 - 联系我们 - 版权声明 - 网站地图