C# Lamda 表达式 =>

一、概述

Lamda 表达式 是作为对象处理的代码块(表达式或语句块)。它可以作为参数传递给方法,也可以通过方法调用返回。Lambda表达式广泛用于:

  • 1、将要执行的代码传递给异步方法,例如Run(Action);
  • 2、编写LINQ查询表达式
  • 3、创建表达式树。

Lamda表达式是可以表示为委托的代码,或者表示为表达式树的代码,它所表示的表达树可以编译为委托。Lamda表达式的特定委托类型取决于其参数和返回值。不返回值的Lamda表达式对应于Action 委托,具体取决于其参数数量。返回值的Lamda表达式对应于Func委托,具体取决于其参数数量。例如,有2个参数但不返回值得Lamda表达式对应于Action<T1,T2>委托。有1个参数并返回值的Lamda表达式对应于Func<T,TResult>委托

Lambda表达式使用声明运算符=>从其可执行代码中分离lamda参数列表。若要创建Lambda表达式,需要在Lambda表达式运算符左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。例如,单行Lambda表达式x=>x*x指定名为X的参数并返回x的平方值,如下面示例所示,你可以将此表达式分配给委托类型:

Func<int,int> square =x=>x*x;Console,WriteLine(square(25));

二、Lambda表达式

  任何Lambda表达式都可以转换为委托类型。Lambda表达式可以转换的委托类型由其参数和返回值的类型定义。如果Lambda表达式不返回值,则可以将其转换为Action委托类型之一;否则,可将其转换为Func委托类型之一。

三、Lambda表达式的类型推理

lambda类型推理的一般规则如下:

Lambda包含的参数类型数量必须与委托类型包含的参数数量相同,

Lambda中的每个输入参数必须都能够隐式转换为其对应的委托参数。

Lambda的返回值(如果有)必须能够隐式转换为委托的返回类型。

四、规则

捕获的变量将不会作为垃圾回收,直至引用变量的委托符合垃圾回收的条件。

在封闭方法中看不到lambda表达式内引入的变量。

lambda表达式无法从封闭方法中直接捕获in、ref或out参数。

lambda表达式中的return 语句不会导致封闭方法的返回。

如果相应跳转的语句的目标位于Lambda表达式块之外,Lambda表达式不得包含goto、break或continue语句。同样,如果目标在块内部,在lambda表达式块外部使用跳转语句也是错误的。

五、与lambda表达式的联系

当使用委托作为函数参数,为每个委托创建相应的函数是比较繁琐的。C#支持匿名函数,也称作lambda表达式,允许直接将函数定义写在函数参数中。下面是一个Lambda表达式的示例,不必再为委托创建专门的函数。

不过Lambda表达式中的函数定义没有重用性,如果需要反复在不同位置中使用相同的委托调用,一般还是创建专门的函数比较好。 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值