首页 > 其他 > 详细

Lambda表达式

时间:2020-03-17 09:10:44      阅读:55      评论:0      收藏:0      [点我收藏+]

记录 Lambda

两种显示形式:

// 第一种:表达式Lambda,右边主体为表达式。
(parameters) => expression
// 第二种:语句Lambda,右边主体为语句块。
(parameters) => { < sequence - of - statements > }

“=>”Lambda声明运算符,左边是lambda参数,右边是lambda主体,这三个元素构成了Lambda表达式。

 

所有Lambda表达式都能转换成委托。如果Lambda表达式没有返回值,则可以转成Action委托类型之一。

// Action有16种重载
Action action = () => Console.Write("");
Action<int, int> action1 = (x, y) => Console.WriteLine(x*y);
Action<string, string, int> action2 = (x, y, z) => Console.Write(x);
Action<string, string, int,long> action3 = (x, y, z,m) => Console.Write(x);

如果Lambda表达式有返回值,则可以转成Func委托类型之一。

// Func有17种重载
Func<int> func = () => 9;
Func<int, string> func1 = x => x.ToString();
Func<int, string> func2 = (x) => x.ToString();
Func<int, int,string> func3 = (x,y) => (x+y).ToString();
Func<int, int,string> func4 = (x,y) => { return (x + y).ToString(); };

 

使用表达式作为主体的“表达式Lambda”可以转换为表达式树,语句Lambda则不可以转换为表达式树。

System.Linq.Expressions.Expression<Func<int, int>> e = x => x * x;
System.Linq.Expressions.Expression<Action> e1 = () => Console.WriteLine("");

 

在需要用到委托类型或表达式的实例时,都可以使用 Lambda表达式。

// 泛型参数类型是Func<T,TResult>,根据表达式推理,则参数类型是Func<int,int>
var squaredNumbers = numbers.Select(x=>x*x);
// Action参数
Task.Run(() => { });

 

参数个数为0,必须有括号。

Func<int> func = () => 9;

 参数个数为1,有无括号都可。

Func<int, string> func1 = x => x.ToString();
Func<int, string> func2 = (x) => x.ToString();

 参数个数超1,必须有括号。

Action<string, string, int> action2 = (x, y, z) => Console.Write(x);

 

Lambda表达式

原文:https://www.cnblogs.com/bibi-feiniaoyuan/p/lambda.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!