欢迎来到天天文库
浏览记录
ID:39465167
大小:41.00 KB
页数:4页
时间:2019-07-04
《Lambda 表达式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Lambda表达式“Lambda表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。所有Lambda表达式都使用Lambda运算符=>,该运算符读为“goesto”。该Lambda运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda表达式x=>x*x读作“xgoestoxtimesx”。类型 可以将此表达式分配给委托类型,如下所示: delegateintdel(inti); delmyDelegate=x=>{returnx*x;}; intj=myDelegate(5);//j=25 创建表达式目录树类型: us
2、ingSystem.Linq.Expressions; //... Expression=x=>x*x; =>运算符具有与赋值运算符(=)相同的优先级,并且是右结合运算符。 Lambda用在基于方法的LINQ查询中,作为诸如Where和Where等标准查询运算符方法的参数。 使用基于方法的语法在Enumerable类中调用Where方法时(像在LINQtoObjects和LINQtoXML中那样),参数是委托类型System..::.Func<(Of<(T,TResult>)>)。使用Lambda表达式创建委托最为方便。例如,当您在System.Linq..:
3、:.Queryable类中调用相同的方法时(像在LINQtoSQL中那样),则参数类型是System.Linq.Expressions..::.Expression,其中Func是包含至多五个输入参数的任何Func委托。同样,Lambda表达式只是一种用于构造表达式目录树的非常简练的方式。尽管事实上通过Lambda创建的对象的类型是不同的,但Lambda使得Where调用看起来类似。 在前面的示例中,请注意委托签名具有一个int类型的隐式类型输入参数,并返回int。可以将Lambda表达式转换为该类型的委托,因为该表达式也具有一个输入参数(x),以及一个编译器可隐式
4、转换为int类型的返回值。(以下几节中将对类型推理进行详细讨论。)使用输入参数5调用委托时,它将返回结果25。 在is或as运算符的左侧不允许使用Lambda。 适用于匿名方法的所有限制也适用于Lambda表达式。有关更多信息,请参见匿名方法(C#编程指南)。 下列规则适用于Lambda表达式中的变量范围: 捕获的变量将不会被作为垃圾回收,直至引用变量的委托超出范围为止。 在外部方法中看不到Lambda表达式内引入的变量。 Lambda表达式无法从封闭方法中直接捕获ref或out参数。 Lambda表达式中的返回语句不会导致封闭方法返回。 Lambda表达式不能包含
5、其目标位于所包含匿名函数主体外部或内部的goto语句、break语句或continue语句。Lambda表达式表达式在右边的Lambda表达式称为“Lambda表达式”。Lambda表达式在构造表达式树(C#和VisualBasic)时广泛使用。Lambda表达式返回表达式的结果,并采用以下基本形式:(inputparameters)=>expression只有在Lambda有一个输入参数时,括号才是可选的;否则括号是必需的。两个或更多输入参数由括在括号中的逗号分隔:(x,y)=>x==y有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型
6、:(intx,strings)=>s.Length>x使用空括号指定零个输入参数:()=>SomeMethod()在上一个示例中,请注意Lambda表达式的主体可以包含方法调用。但是,如果要创建将在另一个域(比如SQLServer)中使用的表达式树,则不应在Lambda表达式中使用方法调用。方法在.NET公共语言运行时上下文的外部将没有意义。Lambda语句Lambda语句与Lambda表达式类似,只是语句括在大括号中:(inputparameters)=>{statement;}Lambda语句的主体可以包含任意数量的语句;但是,实际上通常不会多于两个或三个语句。delegat
7、evoidTestDelegate(strings);…TestDelegatemyDel=n=>{strings=n+""+"World";Console.WriteLine(s);};myDel("Hello");像匿名方法一样,Lambda语句无法用于创建表达式树。带有标准查询运算符的Lambda许多标准查询运算符都具有输入参数,其类型是泛型委托的Func系列的其中之一。Func委托使用类型参数定义输入参数的数目和类型,以及委托的
此文档下载收益归作者所有