Lambda表达式与匿名方法和委托直接的关系

本文详细介绍了C#中的Lambda表达式,包括其两种形式、与匿名方法的关系、与委托的关系,以及Lambda表达式的独特功能,如参数类型推断、支持表达式或语句块作为方法体、通过参数类型选择重载方法、转化为表达式树等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

=> 读作“导出”goes to,个人认为导出翻译的不好。

 

lambda 表达式有两种,expression lambda 和 statement lambda。也就是说lambda表达式不光支持表达式,还支持大括号括起来的任意多条语句。如:

      x => x+1

      x => {return x + 1;}

      (x, y) => x*y

         

 与匿名方法的关系:

在功能上,lambda表达式是匿名方法的一个超集。lambda还提供了一些额外的功能:

 

  1. Lambda表达式能推测出参数的类型,程序中无需声明参数类型。
  2. Lambda表达式支持用语句块或者表达式作为方法体。
  3. 在以参数传递时, Lambda表达式能够判断参数类型,并选择重载的方法。
  4. Lambda表达式能够转化为表达式树。

与委托的关系:

如满足下面3个条件,lambda表达式与委托类型兼容:

  1. lambda表达式与委托类型的参数个数相同。
  2. lambda表达式的每个参数都能被隐式的转换为委托类型的参数类型。
  3. lambda表达式的返回值能够被隐式的转换为委托类型的返回值。

   如:

Func<DataTime> getDateTime = () => DateTime.Now;      //无参数

Action<string> printExplicit = (string s) => Console.WriteLine(s);      //显式类型的字符串参数

Func<int, int, int> compare = (int x, int y) =>

{

    if (x > y) return 1;

    if (x < y) return -1;

    return 0;

}

内容部分摘自《LINQ in Action》一书。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值