lambda表达式
定义:这是一个匿名函数,并且可以捕获一定范围内的变量,是一个能返回一个方法的表达式,但它只包含两个元素:参数列表和方法主体。
简单声明使用:输入参数表=>表达式或者语句块,=>操作符,它向编译器指出这是一个lambda表达式。
例:
a=>a*a; 一个简单的表达式,返回参数值的平方,参数a的类型根据上下文推导。
a=>{return a*a;} 语义和上一个表达式相同,但将一个C#语句块用作主体。
()=>b.a(0) 调用一个方法,表达式不获取参数,表达式可能会、也可能不会返回值。
(a,b)=>{a++;return a/y;} 多个参数,编译器自己推导参数类型,参数a是以值的形式传递,所以++操作的效果是局部于表达式。
(ref int a,int b)=>{a++;return a/b;} 多个参数,都显式指定类型,参数a是以引用形式出传递,所以++操作的效果是永久的。
特点:如果lambda表达式要获取参数,要在=>操作符左侧圆括号内指定它们。可以省略参数类型,C#编译器能根据lambda表达式的上下文来推导。
lambda表达式可以返回值,但返回类型必须与即将添加这个lambda表达式的委托类型匹配。
lambda表达式的主体可以是一个简单的表达式,也可以是一个C#代码块。
lambda表达式方法中定义的变量是局部变量。
lambda表达式可以访问和修改lambda表达式外部的所有变量,只有那些变量在lambda表达式定义时,和lambda表达式处在相同的作用域中。