C#匿名函数之匿名方法与lambda表达式

时间:2022-05-11 20:07:12
匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。

共有两种匿名函数:

.匿名方法

.lambda表达式


下面示例如何使用:

public class Test{
delegate int Add(int a , int b);
static int MyAdd(int a , int b){
return a + b;
}
static void Main(string[] args){
//普通委托
Add ad = MyAdd;
int result = ad (8, 8);
//匿名方法
Add ad2 =delegate(int a , int b) {
return a + b;
};
int result2 = ad2 (8, 8);
//lambda表达式
Add ad3= (a , b) => {return a + b;};//或 (a , b) => a + b;
int result3 = ad3 (8, 8);
}
}

result ,result2 , result3的结果都为16;


匿名方法:

例:

delegate int Add(int a , int b);
Add ad = delegate(int a , int b){/*......*/};
 

delegate void ShowName();
ShowName sn = delegate(){/*...*/};

通过使用匿名方法,由于您不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。


lambda 表达式:

通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。

表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 lambda 会返回表达式的结果,并采用以下基本形式:

 (input parameters) => expression

仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔:

(x, y) => x == y

有时,编译器难以或无法推断输入类型。 如果出现这种情况,你可以按以下示例中所示方式显式指定类型:

(int x, string s) => s.Length > x


使用空括号指定零个输入参数:

() => SomeMethod()


参考:

https://msdn.microsoft.com/zh-cn/library/bb882516.aspx

https://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx

https://msdn.microsoft.com/zh-cn/library/bb397687.aspx