Lambda —— 表达式
Lambda 表达式是一个匿名函数,用它可以高效简化代码,常用作委托,回调
Lambda 表达式都使用运算符 =>
,所以当你见到这个符号,基本上就是一个 Lambda 表达式
Lambda 运算符的左边是输入参数(),=>
,右边是表达式或语句块
Lambda 表达式,是可以访问到外部变量的
可以将此表达式分配给委托类型
仔细分析ladama表达式,就是左边是参数 (),右边是一个表达式或语句块,返回值编译器自动识别
如:
()=> {};
0个参数,返回值为空void
Func<int,int> lama = (x) => { return x * x; };
这个是1个int参数,返回值为int
若参数只有一个,那么可以不需要括号,若入参数大于一个,那么必须有括号
简化后:
Func<int,int> lama = x => { return x * x; };
还可以再简化,因为=>右边可以是表达式或者语句块,我们直接使用表达式:
Func<int,int> lama = x => x * x;
这也是linq里面最常用的写法
返回值:
如果是语句块,那么要显示的调用return,否则编译器会认为是返回void,如:
Func<int,int> lama = x => { x * x; }; //会报错,因为需要返回int,但是因为是语句块,所以没有办法推断类型
Func<int,int> lama = x => { return x * x; }; //正确,因为显示的调用了return
如果是表达式,那么编译器会自动推断表达式的类型,就比如:
Func<int,int> lama = x => x * x;
赋值:
lamada表达式是匿名函数,本质就是一个函数,那么用它可以给Action,Func赋值
比如Task.Run( ( ) => { } ) ;
也正是因为这个所以Linq里面很多的参数需要的是Action和Func,我们可以直接传入lamada函数
如:
List<int> list = new List<int>();
list.Select(q => q=1);
参考:
https://www.cnblogs.com/chinarbolg/p/9601422.html