C#中Lambda表达式演化过程解析及相关注意事项

本文详细介绍了Lambda表达式的演进过程,从原始形态的匿名方法到简洁的Lambda形式。强调了Lambda表达式在匹配委托类型、简化代码以及处理匿名方法时的用法。同时,指出了在使用Lambda表达式时需要注意的事项,如参数匹配、return语句的使用以及参数类型的推断。此外,还列举了多个错误示例,帮助理解Lambda表达式的正确用法。
摘要由CSDN通过智能技术生成

Lambda表达式为匿名方法提供了一个新的语法。
匿名方法就是没有方法名称的方法,可以将委托与匿名方法关联,即直接给出方法体。

以下是Lambda表达式演化过程:

//声明委托类型
public delegate void SayHandler(string name, int age);

//原始形态
SayHandler handler1=new SayHandler(
	delegate(string name, int age){ Console.WriteLine("你好"); }
);
//进化1  直接去掉:new SayHandler( )
SayHandler handler2=delegate(string name, int age){ Console.WriteLine("你好"); }
//进化2 delegate去掉后,换上了一个符号“=>”,读作:goes to
SayHandler handler3=(string name, int age)=>{ Console.WriteLine("你好"); }
//进化3 因为与委托类型是一一对应关系,所以直接去掉参数类型名称
SayHandler handler4=(name, age)=>{ Console.WriteLine("你好"); }
//进化4 匿名方法只有一行代码,则花括号{} 可省略
//注:若参数列表中只有一个参数,则圆括号() 也可省略
SayHandler handler5=(name, age)=> Console.WriteLine("你好"); 

注意事项:

  1. Lambda表达式左边的输入参数列表必须在个数、类型位置上与委托类型相匹配。
  2. 若方法体中存在return语句时,则花括号{ }不可以省略。
  3. 若指定有0个输入参数,则需要用空括号( )表示,即:( ) => { Console.WriteLine(“你好”); }。
  4. 如果编译器无法推出类型,则可以显示地指定类型,即:( int x, int y) => x+y;

以下语句是错误的:

delegate int mydelegate(int x);

mydelegate p1=(int x)=> return(x+1);  //return语句应包含在花括号中
mydelegate p2= x => x++; 		//x没有变,应改为++x;
mydelegate p3= (ref x) => ++x;  //输入参数不是ref类型
mydelegate p4= (out x) => ++x;  //输入参数不是out类型
mydelegate p5= (x, y) => { int z=x*y; z+1;};
//应改为:mydelegate p5= (x, y) => { int z=x*y; return(z+1);};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值