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

lambda表达式

2018-04-02 16:07 155 查看

lambda

1.lambda表达式

lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
使用lambda,可以写入可作为参数传递或作为函数调用值返回的本地函数。
要创建lambda表达式,需要在lambda运算符=>左侧指定输入参数,然后在另一侧输入表达式或语句块。(p=>p.id==1)
p是左侧指定参数
p为当前对象=>运算符具有与赋值运算符=相同的优先级并且是右结合运算。
拓展:右结合运算:
运算符的结合性是指相同优先级的运算符在用一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式。
例:比如=是右结合,那么x=y=z就是先执行y=z,再执行x=y



lambda表达式其实就是匿名方法的变体或者说是简写。原来我们用delegate void del(int x);
del d = delegate(int x){return x+1};lambda表达式就是del d = x => x+1;

2.语句lambda

语句lambda与表达式lambda表达式相似,只是右侧是一个语句块,语句在大括号中。
(input parameters)=>{statement;}例:
(x,y)=>{return x==y;}
语句lambda的主体可以包含任意数量语句;但是,实际上通常不会多于两三个。

表达式lambda可以转换为类型Expression<T>的表达式树,而语句lambda不可以。

3.异步lambda

通过使用async和await关键字,可以轻松创建包含异步处理的lambda表达式和语句。
可以使用异步lambda添加同一事件处理程序,要添加此处理程序,在lambda参数前加一个async修饰符。async p=>

4.变量范围

1.捕获的变量将不会被作为垃圾回收,直至应用变量的委托符合垃圾回收的条件。
2.在外部方法中看不到lambda表达式内引入的变量。
3.lambda表达式无法从封闭方法中直接捕获in,ref或out参数。
4.lambda表达式中的返回语句不会导致封闭方法返回。
5.如果跳转语句的目标在块外部,则lambda表达式不能包含于lambda函数内部的goto语句,break语句或continue语句。同样,如果目标在块内部,则在lambda函数块外部使用跳转语句也是错误的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息