您的位置:首页 > 编程语言 > C#

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

2015-07-18 23:21 465 查看
匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。

共有两种匿名函数:

.匿名方法

.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: