C#内建接口:IEnumerable

    这节讲一下接口IEnumerable

01

什么是Enumerable

    在一些返回集合数据的接口中,我们经常能看到IEnumerable接口的身影。那什么是Enumerable呢?首先它跟C#中的enum关键字所表达的意思是不同的, 从翻译上来看:可枚举的,展开来说就是它的数据是一枚一枚可以让我们列举出来。就像人们排队去打疫苗,排队的人就是可枚举的,他们有的开车,有走着,有早有晚全都按照先来后到的顺序排好队,当医生开始进行打疫苗的工作时,他并不关心有多少人在排队,也不关心是否有人迟到,当然也不能越过第一个人让其后边的人先进来打,他只能说“请下一个人进来打疫苗”,如果没人响应医生就等着,直到有人进来开始接种,当前这个人完成接种后,医生继续叫下一个人,直到所有人都打完疫苗。这样的情景在编程中就体现为对Enumerable数据的操作。

02

接口成员及使用示例

    我们先来看接口中有什么,因为IEnumerable接口一般都是用其泛型版,我们直接看这种:

feb136fa9160b0299ac13bcbdf32b1f0.png

    接口内容很简单,但是其中又出现了一个名为IEnumerator的接口,我们可以称之为枚举器,再来看看IEnumerator内部成员:

3b1f46df6af873bb7f0bd8db5d30156e.png

1fd4e311b2adbf22a7bf9899393e51c3.png

    IEnumerator接口有三个成员,Current就是保存的当前数据对象,MoveNext方法则是将指针指向下个对象(类似打疫苗情景中的"下一位"),Reset则是将指针复位,泛型版接口则对其内部名为Current的成员指定了类型。也就是说通过枚举我们可以获取一个枚举器,通过枚举器我们能找到一个个数据对象,明白了这一点,我们就能大体上了解如何通过IEnumerable来获取数据了,那下面请看代码:

ecb209c84dd3e4ce322cc446f7f40773.png

    代码中有一个返回IEnumerable<string>的方法,用来模拟数据的产生,其中用到了一个yield关键字,我简单来说yield return就是部分返回(产生了一个数据,就返回一个,yield具体用法请看我上一篇分享的文章:[C#.NET 拾遗补漏] 理解 yield 关键字),这个方法最终的运行效果就是一秒钟返回一个当前时间构成一个IEnumerable<string>集合。

    foreach就是为遍历IEnumerable数据打造的,它里边为我们封装了访问枚举器的操作,所以我们用它来遍历数据非常方便,下面来看一下运行效果:

488ca46f0e24523cadbd62e3d4a73f06.png

    当然,我们也想知道不用foreach应该怎么遍历IEnumerable数据,所以请看如下代码:

33725a3ed8ab4efe24298e52dcdfe8c3.png

    拿到枚举器,我们就可以调用MoveNext找数据(为什么要先调用MoveNext,而不是先取值,再调用MoveNext寻找下一个数据,大家可以再次联想一下打疫苗的情景:是先叫人,人到了,才能打疫苗),该方法返回bool值,有数据可寻则返回true,无数据则返回false,这就是循环的关键,运行结果跟上图一致,此处不再展示。

本节到此结束...

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

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

相关文章

ubuntu,kali linux和windows三系统流水账——写给自己

我先说一下ubuntu和windows双系统安装的几种方法&#xff0c;最后总结kali linux的安装&#xff0c;想起什么写什么&#xff0c;所以有点乱。然后记录一下自己的使用过程中遇见的问题和解决的方法&#xff0c;还有我的个人建议。 我个人安装的是目前最新的ubuntu16.04LTS。wind…

一个富二代仅凭“1+1”就压制了全世界的数学家两个世纪......

全世界只有3.14 % 的人关注了爆炸吧知识在数学界&#xff0c;“11”是一个超级大难题&#xff0c;吸引了许多优秀的数学家去攻关打boss。但至今还未有人闯关成功。这位被众多数学家恨得牙痒痒的罪魁祸首就是——克里斯蒂安哥德巴赫。克里斯蒂安哥德巴赫1690年3月18日&#xff0…

用C语言实现数组反序

题目: 比如输入:数组是1,2,3,4,5 反序后的结果是:5,4,3,2,1 实现代码如下 #include <stdio.h> //用数组反序数组 void reserve1(int a[],int n){int m=(n+1)/2;int i=0;for(i;i<m;i++){int j=n-1-i;int temp=a[i];a[i]=a[j];a[j]=temp;} } //用指针进行反…

ordersta在php中是什么意思,[求助]ststa中的几个问题

<p> (1)hausman检验的结果如下——是什么意思呢</p><p>Test: Ho: difference in coefficients not systematic</p><p> chi2(4) (b-B)[(V_b-V_B)^(-1)](b-B)<br/> -16.36 chi2<0 &g…

java中错误的源文件,关于Java源文件结构规则,说法错误的是()A.版权信息必须在java文件的开头B.package语句在imports...

关于Java源文件结构规则&#xff0c;说法错误的是()A&#xff0e;版权信息必须在java文件的开头B&#xff0e;package语句在imports更多相关问题霍乱患者产生“米泔样”粪便由下列哪种致病因素直接引起普通话是以北京语音为标准音,所以北京话就是普通话。 (7.0分)在蜗杆传动中,…

switch类型模式

switch的模式中有一种叫类型模式&#xff0c;可以根据switch的类型来执行对应的case&#xff0c;这点在代码中用到的比较频繁&#xff0c;特别是在对应同类型对象的操作中。本例是把一组数据&#xff0c;转成一种格式&#xff0c;就是很简单的使用switch类型模式实现&#xff0…

Android框架之网络开发框架Volley

1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术&#xff0c;而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android 系统中主要提供了两种方式来进行HTTP通信&#xff0c;HttpURLConnection和HttpClient&#xff0c;几乎在任何项目…

史上最会抄的数学家!把阿拉伯数字直接抄进自己的书里,连中国几千年前的名著都惨遭毒手.........

全世界只有3.14 % 的人关注了爆炸吧知识大家都喜欢《蒙娜丽莎的微笑》&#xff0c;但你知道她为什么好看吗&#xff1f;《蒙娜丽莎的微笑》没错&#xff0c;她符合黄金分割法0.618原则嘛&#xff01;但你知道这世界上还有一个数列版的黄金分割法的吗&#xff1f;这个数列就是斐…

求数组里面的最大值和最小值

题目&#xff1a; 求数组里面的最大值和最小值比如&#xff1a;数组 1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5最大值是5&#xff0c;最小值是1代码实现&#xff1a; #include <stdio.h> int max,min; void getMaxAndMin(int a[],int n){int *q;qa;maxmin*…

【ASP.NET开发】.NET三层架构简单解析

这篇文章本来应该很早就写出来的&#xff0c;但是一直苦于自己的精神能力有限&#xff0c;而且已经到了我们学校的考试周&#xff0c;所以时间上还是有点紧迫。关键的一点就是&#xff0c;找不到合理的思路来写&#xff0c;思路没有的话&#xff0c;就算是再好的素材&#xff0…

高级php平时的工作,【高级PHP开发工作内容|工作职责|高级PHP开发做什么】-看准网...

职位要求1.能非常熟练PHP开发和调试语言&#xff1b;并且在Python/Ruby/Perl语言上有更好经验&#xff1b;良好的编码风格习惯和测试习惯维持系统的质量&#xff1b;2.乐于维持和提高团队的专业水平&#xff0c;甚至正面影响其他开发队伍&#xff1b;3.乐于了解业务需求、协助团…

C和C++里面常见错误和异常出现怎么解决总结(不断更新)

1、cannot open Debug/first.exe for writing 如下图: 原因:控制台没有关闭,不能写,因为编译的exe文件正在运行,而再次编译是要修改这个exe文件的,因为不让写,所以就抱着这个错。 解决办法:是看有没有运行编译后文件,如果正运行着,就将其关掉。 2、cannot conver…

PHP PDO

PDO:数据访问抽象层方法一 <?php //造dsn&#xff0c;驱动名&#xff1a;dbname数据库名&#xff1b;host服务器地址 $dsn"mysql:dbnamemydb;hostlocalhost"; //造pdo对象 $pdonew PDO($dsn,"root","135395"); //写sql语句 $sql"select…

有关[Http持久连接]的一切,卷给你看

上文中我的结论是&#xff1a; HTTP Keep-Alive 是在应用层对TCP连接进行滑动续约复用&#xff0c; 如果客户端/服务器稳定续约&#xff0c;就成了名副其实的长连接。目前所有的Http网络库都默认开启了HTTP Keep-Alive&#xff0c;今天我们从底层TCP连接和排障角度撕碎HTTP持久…

他从小把数学书当小说看,凭借一本书将全世界狠狠甩在身后,被誉为中国的牛顿...

全世界只有3.14 % 的人关注了爆炸吧知识你知道吗&#xff1f;我国也有牛顿哦。他就是魏晋时期的数学家——刘徽&#xff0c;人称“中国数学史上的牛顿”。刘徽沉迷学习公元225年&#xff0c;刘徽出生在山东滨州邹平市的一所农家小院里。从小&#xff0c;刘徽就表现得与别的孩子…

简单调试 Bash 脚本

用 Bash 写的脚本也可以进行调试&#xff0c;和 Python&#xff0c;Perl 等解释型语言一样。新建一个名为 servinfo 的脚本并增加可执行权限&#xff1a; $ vi servinfo#!/bin/bashecho "Hostname: $(hostname)" echo "Date: $(date)" echo "Kernel: …

PHP优于Node.js的五大理由

PHP是一款服务器端的脚本语言&#xff0c;主要用于动态网页开发&#xff0c;是目前最流行的开发语言之一。Node是一款用来编写高性能网络服务器的JavaScript工具包。文中将两者进行对比&#xff0c;列举了PHP优于Node.js的五大理由。一起来看下。 PHP优于Node.js的理由 容易托管…

C和C++语言编程里面常用函数或者编程技巧总结(不断更新)

1、我们输入字符串输出字符串可以这样 char a[20];gets(a);puts(a);puts("hello word"); 2、输出字符串putchar()、printf("%p\n",p);cout<<p; #include<stdio.h> void main(){char a[20]={"chenyu1"};char *c="chenyu2"…

python 3.* + Eclipse mar.2 +pydev 5.0 环境搭建

为什么80%的码农都做不了架构师&#xff1f;>>> 这个是版本问题&#xff0c;官方已给出答案 如果要用pydev 5.0 JDK 必须 1.8&#xff0c;1.7是不行的。 PyDev does not appear after install! Well, the main issue at this time is that PyDev requires Java 8 i…

php7 不是有效的32位,Win7系统安装软件提示“不是有效的win32应用程序”怎么办?...

用户在Win7系统中安装软件时&#xff0c;时常会出现一些64bit和86bit的提示&#xff0c;这个和系统32位与64位有关&#xff0c;笔者便不多说。还有一些在Win7系统中比较少见的提示&#xff1a;“不是有效的Win32程序”会偶尔出现&#xff0c;这类错误发生的原因是为软件不完整或…