C# Linq源码解析之All

前言

在Dotnet开发过程中,All作为IEnumerable的扩展方法,十分常用。本文对Aggregate方法的关键源码进行简要分析,以方便大家日后更好的使用该方法。

使用

确定序列中的所有元素是否都满足条件,如果都满足就返回true,如果有一个不满足就返回false

有这样一段代码,我们判断集合中的元素的性别是否都为男,我们就可以使用linq中的all方法

public class UserInforMation{public string UserName { get; set; }public string Sex { get; set; }}
List<UserInforMation> lstUserInforMations = new List<UserInforMation> {new UserInforMation{ UserName="张三",Sex="男"},new UserInforMation{ UserName="李四",Sex="男"},new UserInforMation{ UserName="王麻子",Sex="男"}};bool flag = lstUserInforMations.All(o => o.Sex == "男");

我们查看ALL的原型

public static bool All<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
原型参数
  • 第一个参数是我们source 元素的类型

  • 第二个参数是一个委托,该委托用于判断所有元素是否满足某个条件

Func<TSource,bool> predicate

这个func委托接收一个和源元素相同的参数类型,并返回一个bool!

返回

可以看出该方法返回的一个bool变量,如果每个元素都满足func,或者序列为空,则为 true;否则为 false!

这样我们把All的原型理解完了,就能够很轻易的写出All的源码!

我们使用foreach遍历源元素,如果有一个不满足我们就返回false,因为这个方法的定义是序列中的所有元素是否都满足条件才返回True,否则返回false!

public static bool MyAll<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate){if (source == null){throw new Exception("source");}if (predicate == null){throw new Exception("predicate");}foreach (TSource item in source){if (!predicate(item)){return false;}}return true;}

官方在这里埋了一个坑,官网对all有个说明,如果集合为空,这个方法也会返回true,所以我们在使用all的时候,一定要对集合判断是否含有元素,如果没有,就不要使用all了,这时候他返回的结果对于我们来说就是不对的了!看这样的一个例子

List<UserInforMation> lstUserInforMations2 = new List<UserInforMation>();bool flag = lstUserInforMations.All(o => o.Sex == "男");

这时候就是返回true,所以我们在使用前最好进行判空

List<UserInforMation> lstUserInforMations2 = new List<UserInforMation>();if (lstUserInforMations2.Any()){bool flag = lstUserInforMations.All(o => o.Sex == "男");}

当然有的人觉得这是个bug,那么对于聪明的你们来说来改造这个源码不是手到擒来吗?今天我的介绍就到此结束了,既然看到了这里,还麻烦给个赞!明天给大家带来Any的源码解析!

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

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

相关文章

(六)python3 只需3小时带你轻松入门——循环

for循环 使用循环可以重复执行某些代码&#xff0c;可以方便程序编写&#xff1b;但是不记效率的使用循环会使程序运行效率降低。 range 使用range()函数可以生成多个连续整数的range对象(这个概念后面会说)。基本格式&#xff1a;range(end)其中end是结尾数。range(10)则会生…

linux下查看mysql的当前连接情况

为什么80%的码农都做不了架构师&#xff1f;>>> 首先需要登录到mysql中。 总共有三个命令&#xff1a; 1、status mysql> status--------------mysql Ver 14.14 Distrib 5.5.30, for Linux (x86_64) using readline 5.1Connection id: 96Current data…

菜鸟学ASP.NET MVC4入门笔记

ASP.NET MVC 是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序(Web Application)框架,它由Castle的MonoRail而来。 MVC 编程模式 MVC 是三种 ASP.NET 编程模式中的一种。 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。 (…

vue 如何调用微信分享_微信jssdk分享接口,在vue单页应用使用中遇到的问题

微信jssdk分享接口&#xff0c;wx.updateAppMessageShareData&#xff0c;wx.updateTimelineShareData&#xff0c;在vue单页应用使用中遇到的问题&#xff0c;记录一下微信JS-SDK文档&#xff1a;原有的 wx.onMenuShareTimeline、wx.onMenuShareAppMessage、wx.onMenuShareQQ、…

用计算机画图软件画画教程,电脑画图软件有什么使用技巧,电脑画图软件教程...

一、第一步是点击右下角的“开始”图标。在开头上方&#xff0c;出现一个对话框&#xff0c;您找到“所有应用程序”&#xff0c;您右键单击鼠标&#xff0c;在出现的对话框中&#xff0c;您找到“附件”&#xff0c;您左键单击鼠标&#xff0c;在“附件”的右侧出现一个对话框…

JVM-并发-Java 内存模型

Java内存模型 (1). 主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存中&#xff0e; 每类线程的变量的主内存副本拷贝&#xff0c;线程对变量的所有操作&#xff08;读操作&#xff0c;赋值操作等&#xff09;都必须工作内存中进行&#xff0c;而不能直接读写主内…

(七)python3 只需3小时带你轻松入门——List与dict

List列表 python中最基本的数据结构之一。序列&#xff08;或者说集合&#xff09;中的每个元素都分配一个数字用来表示它的位置&#xff08;索引&#xff09;&#xff0c;第一个索引是0&#xff0c;第二个索引是1&#xff0c;依此类推。 索引 索引最大值不能超过当前对象的最…

龙芯推出兼容IE的龙芯浏览器解决方案,全面支持ActiveX插件等应用类型

近期&#xff0c;龙芯中科推出了兼容IE的浏览器解决方案&#xff0c;可全面支持采用ActiveX插件等IE时代技术开发的网页应用。众所周知&#xff0c;IE浏览器因年代久远&#xff0c;已逐步退出历史舞台。但在我国行业和个人应用中&#xff0c;仍存在着大量基于IE浏览器开发的网页…

DPS软件做MK(Mann-Kendall)突变监测分析方法(附DPS 7.05软件下载地址)

Mann-Kendall是一种非参数统计检验方法&#xff0c;具有样本不遵从某一特定分布&#xff0c;不受个别异常值干扰&#xff0c;能够客观地表征样本序列整体变化趋势等优点。 虽然DPS软件具有强大的统计分析和数据可视化功能&#xff0c;但是相关的示例和教程却本博文演示Mann-Ke…

linux之ftp怎么把本地文件拷贝到服务端

1 问题 电脑本地文件怎么通过ftp拷贝到服务端 2 解决办法 我们可以用put命令 put file_path 那我们怎么解决把服务端的文件拷贝到本地呢&#xff1f;很明显啊&#xff0c;我们可以使用get命令 get file_path

clientHeight、offsetHeight 和 scrollHeight

2019独角兽企业重金招聘Python工程师标准>>> window.screen.availWidth 返回当前屏幕宽度(空白空间) window.screen.availHeight 返回当前屏幕高度(空白空间) window.screen.width 返回当前屏幕宽度(分辨率值) window.screen.height 返回当前屏幕…

计算机应用怎么拼写,计算机应用本科论文提纲格式范文 计算机应用本科论文提纲如何写...

精选了【100个】关于计算机应用本科论文提纲格式范文供您后续的写作参考,在写计算机应用本科论文之前,很多大学生总是被计算机应用本科论文提纲如何写难倒怎么办?请阅读本文&#xff01;五、我国体育院校体育教育专业本科体育信息技术课程体系的构建研究论文提纲中文摘要abstr…

tcpdump 如何kill_如何用tcpdump命令过滤掉一部分的数据包(需用tcpdump命令将截获的信息过滤。)...

你的位置:问答吧-> Linux-> 问题详情如何用tcpdump命令过滤掉一部分的数据包(需用tcpdump命令将截获的信息过滤。)共享上网&#xff0c;需知道各客户端浏览网页时有那些连接是有效的。例&#xff1a;tcpdump -i ppp0 src host 192.168.0.3 and dst port 80那么就可以将所…

jquery send(data) 对data的处理

// Convert data if not already a string if ( s.data && s.processData && typeof s.data ! "string" ) {s.data jQuery.param( s.data, s.traditional ); } 转载于:https://www.cnblogs.com/chenxijywc/p/5377531.html

(八)python3 只需3小时带你轻松入门——List 与 dict 的常用操作

List定义 定义:list1 [name,python,sun,dog] list获取:list1[0]->name,list1[3]->sun list修改:list1[0],list1[3]Lihua,run list输出: print(list[0]) 检验代码&#xff1a; list1 [name,python,sun,dog] print(list1获取索引0位置&#xff1a;,list1[0]) list1[0],l…

几何校正,正射校正,影像配准,辐射定标,辐射校正,大气校正,地形校正概念详解

一、几何校正 1、概念 是指消除或改正遥感影像几何误差的过程;

如何用 foreach 遍历方法中的所有参数?

咨询区 Farhad请问是否有办法可以遍历某个方法的 参数列表 中是否有 null 的情况&#xff0c;比如下面这样的伪代码&#xff1a;public void test (string arg1, string arg2, object arg3, DataTable arg4) {foreach (var item in argus){if( item null){throw;}}// do the r…

linux之errno值为104(connetction reset by peer)

1 问题 往fd里面写&#xff08;write方法&#xff09;入数据的时候出错&#xff0c;返回小于等于0的值&#xff0c;然后这个时候打印errno值是104 2 分析 errno是104就是connetction reset by peer&#xff0c;表明在对一个对端socket已经关闭的的连接调用write或send方法&am…

python 蓝牙模块pybluz安装

最近项目运用了蓝牙&#xff0c;所以来学一学蓝牙。 经过查阅&#xff0c;知道python的蓝牙模块是pybluz&#xff0c;然后老管理进行安装 出错&#xff0c;提示“Could not find the Windows Platform SDK” 到https://pypi.python.org/pypi/PyBluez 下载码源 查看setup.py 出错…

eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules...

当部署项目Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, 1.5 and Java EE 5 Web modules错;解决方案&#xff0c;如下面: 空间项目下的.settings以下&#xff0c;有个名为org.eclipse.wst.common.project.facet.core.xml的文件。里面配置有各种版本号信息: <?xml…