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函数块外部使用跳转语句也是错误的。
相关文章推荐
- Java 8 新特性:Lambda 表达式
- Java 8 新特性:Lambda 表达式的作用域(Lambda 表达式补充版)
- 使用Lambda 表达式
- 探索Java语言与JVM中的Lambda表达式
- C++11 lambda 表达式解析
- Cocos2dx 3.0 过渡篇(十二) lambda表达式的使用
- 从委托到匿名方法,再到Lambda表达式
- C# 集合类之lambda表达式使用
- Lambda 表达式
- Lambda 表达式 C#
- C++ 中的 Lambda 表达式
- Java Lambda表达式详解和实例
- python 之 lambda 表达式的基本用法
- JDK 8 新特性学习(二) Lambda表达式、集合流之操作
- 谓词与lambda表达式
- 个人理解的Lambda表达式的演化过程
- Why to do,What to do,Where to do 与 Lambda表达式!
- java lambda 表达式中的双冒号的用法 ::
- C# 3.0特性之Lambda表达式
- Java8 Lambda表达式与Stream API (二): Stream API的使用