系列教程 · 2023年4月2日

C#高级教程——C#Lambda表达式

C# Lambda表达式

lambda表达式是一个未命名的方法,代替一个委托实例。

给定以下委托类型:

我们可以如下分配和调用lambda表达式x => x * x:

lambda表达式具有以下形式:

在我们的示例中,有一个参数, x ,表达式为 x * x :

lambda表达式的每个参数都对应一个委托参数,表达式的类型对应于委托的返回类型。

在上面的代码中, x 对应于参数 i ,表达式 x * x 对应于返回类型 int ,因此它与 Converter 委托兼容,如下所示:

lambda表达式的代码可以是语句块而不是表达式。

Lambda表达式最常用于Func和Action委托。

我们可以重写上面的代码如下:

下面是一个接受两个参数的表达式示例:

捕获外部变量

lambda表达式可以引用定义它的方法的局部变量和参数。

例如:

由lambda表达式引用的外部变量称为捕获变量。

捕获变量的lambda表达式称为闭包。

捕获的变量在实际调用委托时求值,而不是在捕获变量时求值:

Lambda表达式可以更新捕获的变量:

匿名方法

要编写匿名方法,请包括delegate关键字,随后可以包含参数声明,然后是方法体。

例如,给这个代理:

我们可以写和调用匿名方法如下:

第一行在语义上等同于以下lambda表达式:

或者简单为:

匿名方法以与lambda表达式相同的方式捕获外部变量。