你真的了解Lambda表达式吗?

简介

Lambda 是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数!

场景

比如有这样一个场景,在给出的List集合中找出数字大于等于18的数字,假如我们不知道有linq这种东西!

List<int> lstAges = new List<int> { 16,17,18,19,20 };

我们预定义了一个输出年龄的方法

void OutPutAge(Func<int,bool> func){foreach (var item in lstAges){if (func(item)){Console.WriteLine(item);}}}

可以看出方法接收一个委托,该委托接收一个int类型的参数,并返回bool

那么我们首先会定义一个方法,当年龄大于18的时候我们返回true

bool IsAgeScrren(int age){return age > 18;}

使用

OutPutAge(IsAgeScrren);

比如说我们现在知道这个方法仅仅传递一个方法的引用,我们很确定这个方法只会调用这一次,单独为它创建一个方法感觉有些浪费,但是又必须用到这个方法,但是思考半天想不出该给这个方法取什么名字)。这个时候Lambda就派上用场了!

那么我们可以先简化成匿名方法

OutPutAge(delegate (int age) { return age > 18; });

现在我们把delegate关键字删掉,在参数列表和方法体之间使用=>箭头符号连接,这就形成了Lambda表达式

OutPutAge( (int age) =>{ return age > 18; });

在函数式的编程语言中,如果最后一句是return表达式的话,我们最后可以把return和{}这个关键字省掉

OutPutAge( (int age) =>( age > 18));

c#也有类型推断功能,我们在前面的    foreach (var item in lstAges)

这里c#可以自动推断出 age是int类型,所以我们也可以把int类型直接省掉

就变成了,这样看起来是不是就和我们平常的lambda表达式一样了

OutPutAge(  age => age > 18);

那么我们再回到头来看,如果我们知道Linq语句中的where方法其实帮我们做了很多事

List<int> lstAges = new List<int> { 16,17,18,19,20 };lstAges.Where(o => o > 18)

我们再看一下Where的定义

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate){throw null;}

他是使用了扩展方法和委托来完成的

source是 源元素的类型,predicate是接收一个int类型的参数,并返回bool变量。

最后

通过刚才的例子讲解,也很容易推断出Where源码和我们预定义的方法差也差不多的!

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate){if (source == null)throw new Exception("数据源为空");foreach (var item in source){if (predicate(item) ){yield return item;}}}

最后大家如果喜欢我的文章,还麻烦给个关注, 希望net生态圈越来越好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python远程执行shell 防止注入脚本_解决 window 上python远程执行shell paramiko 下令 Permission denied...

1. 若是程序是在 Linux远程执行 , 那么遇到某些下令是不需要 再输入密码的但若是 python 是在内陆 , 用 paramiko包 远程ssh登录执行下令 , 就会遇到需要输入密码2.解决办法 , 在windows上面 ssh-keygen -t rsa -C “abby192.168.1.100” , 公钥的作用域是远程 IP用户名 为’…

MT3608 高效率1.2MHz2A升压转换器和MT3608L 高效率1.2MHz 2.5A升压转换器 MT3608L和MT3608的区别

MT3608是一个恒定的频率&#xff0c;6引脚SOT23电流模式升压转换器的小&#xff0c;低功耗应用的目的。该MT3608开关在1.2MHz&#xff0c;并允许微小的&#xff0c;低成本的电容器和电感器使用2毫米或更小的高度内部软启动浪涌电流的结果&#xff0c;并延长电池寿命。 …

CityEngine 2012与ArcGIS 10.2破解心得

安装及破解步骤&#xff1a; 1.卸载机子上原有的ArcGIS的License以及Desktop。 2.安装及破解CityEngine。&#xff08;安装包及注册码下载见点击打开链接&#xff09; 3.安装ArcGIS Desktop即可&#xff0c;不需要安装Lisence。 4.如果第三步结束后ArcGIS打不开&#xff0c…

函数学习-abs()

下面开始&#xff0c;今天的函数是abs()先看官方英文文档解释abs(x)Return the absolute value of a number. The argument may be a plain or long integer or a floating point number. If the argument is a complex number, its magnitude is returned.详解&#xff1a;返回…

动态规划之编辑距离

1、问题 例如两个字符串 FAMILY 和 FRAME ,有两种 对齐方式: 1)、 F_A MIL Y FRAME 2)、 _FAMILY FRAME 第 1 种对齐需要付出的代价: 4 ,插入 R ,将 I 替换为 E ,删除 L 、 Y 。 第 2 种对齐需要付出的代价: 5 ,插入 F,将 F 替换为 R ,将 I 替换为 E ,删除 L 、 Y 。…

JsonRequestBehavior.AllowGet 方便浏览器调试

[HttpGet]public ActionResult getCoversationList(int CustomerId){// 获取用户相关的聊天数据&#xff0c;包括个人&#xff0c;群&#xff0c;系统(可以单独获取)return Json(new { result true, info "", msg "操作成功" }, JsonRequestBehavior.Al…

基于.NET6的开源工业物联网网关

什么是工业物联网网关工业物联网网关&#xff08;IIoTGateway&#xff09;是一种硬件设备或软件程序&#xff0c;作为本地设备(如PLC、扫码枪、机器人、数控机床、非标上位机等)与云端系统(如物联网平台、SCADA系统、MES系统等)之间的桥梁&#xff0c;在设备和云端之间流动的所…

php之简单使用数据库

1.数据库连接 1.1用windows命令行链接数据库服务器 几个DOS命令 在DOS环境下命令后面没有分号&#xff0c;在MySQL环境下&#xff0c;命令后面有分号 进入盘符&#xff1a; 语法&#xff1a;盘符&#xff1a; 进入盘符下的某个文件夹 语法&#xff1a;cd 路径 上级目录&#xf…

CityEngine生成不等间距桥墩

在CityEngine中建立高架桥时自动生成的桥墩属于几乎等距的桥墩&#xff0c;对于不等距的桥墩该如何处理&#xff1f;另外&#xff0c;等距桥墩会有产生很多问题&#xff0c;比如&#xff1a;桥墩会压盖在下方路面上。 解决思路&#xff1a;获取桥墩点位数据&#xff0c;之后使用…

linux之vim操作快速跳到下一个空格和上一个空格命令

1、问题 vim里面如何再文本里面快速跳到下一个空格和上一个空格 2、操作 w是在文本里面快速跳到下一个空格 b是在文本里面快速跳到上一个空格

有哪些小游戏的java代码_求一个Java小游戏代码(鼠标点击类小游戏)最好代码里面不要有中文...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼}else{black_count0;}if(chess[i][j]2){white_count;if(white_count5){JOptionPane.showMessageDialog(this,"白棋胜利");Clear_chess();return;}}else{white_count0;}}}for(int i0;i<11;i)//竖向到五个子赢棋{for(in…

SmartFoxServer资料

http://blog.sina.com.cn/s/blog_6bc2090c0100pgkx.html http://www.cnblogs.com/winson-w/p/3555106.html http://www.smartfoxserver.com/ http://asfox.blogbus.com/c1617676 http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616853.html

keepalived 报错 Popt libraries is required

2019独角兽企业重金招聘Python工程师标准>>> …… checking for SSL_CTX_new in -lssl... yes checking for poptGetContext in -lpopt... no configure: error: Popt libraries is required 解决办法 yum install popt-devel -y 转载于:https://my.oschina.net/col…

芒果TV会员,月卡最低9.9元,年卡最低128元!

全国首部湘商题材电视剧《一代洪商》&#xff0c;将于3月27日在央视八套&#xff08;电视剧频道&#xff09;播出&#xff0c;芒果TV将线上播出。该剧由王少华编剧&#xff0c;路奇担纲导演&#xff0c;孟凡耀担任总制片人&#xff0c;张丰毅、李立群、张睿、张含韵等人主演&am…

Android studio之迁移定制出现Installation failed with message Failed to finalize session

1、问题 把之前能运行的android studio项目换了个目录&#xff0c;但是运行出现这个错误 Installation failed with message Failed to finalize session 2、解决办法 点击android studio然后点击Build, 然后点击Clean Project

CityEngine如何生成隧道

在我们的生活中&#xff0c;大家经常乘坐汽车、动车等交通工具&#xff0c;会经过如隧道这样的路段&#xff0c;也许大家在经过隧道的时候会有一种疑惑&#xff0c;这隧道是如何修建的&#xff1f;对于我们GISer来讲&#xff0c;可能会考虑如何将其数字化&#xff0c;是以二维的…

idea java8_太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!...

使用 IntelliJ IDEA 来帮忙构建你自己的实时模板连接分组Java8在2014年三月发布&#xff0c;距离现在(2015年三月五号)快有一年了。我们打算将Pondus的所有生产服务器升级到这一新版本。从那时起&#xff0c;我们将大部分代码库迁移到lambda表达式、数据流和新的日期API上。我们…

免费的编程中文书籍索引

http://siberiawolf.com/free_programming/index.html转载于:https://www.cnblogs.com/zangdalei/p/4967758.html

Flask 应用的文件结构

2019独角兽企业重金招聘Python工程师标准>>> 作为微框架&#xff0c;即便只有一个文件也可以编写基于 Flask 的 Web 应用。然而对于许多现实世界中的应用&#xff0c;拥有数十个以上的视图&#xff08;view&#xff09;是非常正常的&#xff0c;这时候&#xff0c;F…

SSH连接linux时,长时间不操作就断开的解决方案

转载地址&#xff1a;http://www.cnblogs.com/jifeng/archive/2011/06/25/2090118.html修改/etc/ssh/sshd_config文件&#xff0c;找到 ClientAliveInterval 0和ClientAliveCountMax 3并将注释符号&#xff08;"#"&#xff09;去掉,将ClientAliveInterval对应的0改成…