foreach和IEnumerable+yield和IEnumerator

C#里,foreach可以算是个高一等级的循环,因为想要使用foreach必须实现IEnumberable,然后还需要在这个接口的唯一方法中,用yield return返回元素,才能达到foreach的循环效果。

 class MyList : IEnumerable{string[] arr = new string[] { "a", "b", "c" };public IEnumerator GetEnumerator(){for (var i = 0; i < arr.Length; i++){yield return arr[i];}}}

然后直接调用

var myEnumerable = new MyList();
foreach (var e in myEnumerable)
{WriteLine(e);
}

如果我们剥离一层,把foreach和IEnumberable剥离了,看看会是什么样的效果,这次,不去实现IEnumerable,只是定义了一个返回IEnumberator的方法,用yield返回

class Itmes
{string[] arr = new string[] { "a", "b", "c" };public IEnumerator GetItem(){for (var i = 0; i < arr.Length; i++){yield return arr[i];}}
}

同样在调用的时间,没有foreach,为了更清楚的看清逻辑,这里换成了while对IEnumerator的操作,yield return后,返回的类型被封装在了IEnumerator中。如果通过获取当前值用Current,后移索引值用MoveNext,以方便来取下一个元素的值,也就是说,真正实现了控制取值的效果。

var item = new Itmes().GetItem();
while (item != null && item.MoveNext())
{WriteLine(item.Current);
}           

至于IEnumberable的作用,就是可以把一个对象,置于foreach语法中,这个对象看上去更像一个集合序列了:foreach (var e in myEnumerable)中的 myEnumberable就是这个集合序列,但本质上元素是在string[]中放着。

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

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

相关文章

话里话外:企业管理软件的方案设计要规避哪些风险

博主推荐延展咨询资深顾问 梁云文章 企业管理软件作为帮助企业管理者优化工作流程&#xff0c;改善管理水平的信息化工具&#xff0c;现如今被大多数的企业接受并在不同层面进行了应用。作为企业管理软件的方案设计者&#xff0c;我们必须从企业管理者、软件操作者的不同视…

java使用zmodem_SecureCRT 中使用zmodem和Linux服务器交换文件

注意&#xff1a;Linux在默认安装的情况下是没有sz和rz这两条指令的&#xff0c;rmp包为&#xff1a;lrzsz-xx.xx-xxx.rpm&#xff0c;用rmp –q lrzsz查看是否安装&#xff0c;没有的话安装&#xff1a;命令&#xff1a;rpm –ivh lrzsz-xx.xx-xxx.rpm安装后查看&#xff1a;1…

每次有人来家里,总有人问我这个积木在哪买的

▲数据汪特别推荐点击上图进入玩酷屋作为一名资深积木达人&#xff0c;小木我可是大大小小的积木阅览无数&#xff0c;当然乐高也不会放过&#xff0c;虽然“钱包君”已经是路人了。&#xff08;每月的工资用来买乐高~&#xff09;之前给大家推荐了一款STEAM积木&#xff0c;小…

NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?

咨询区 Shantanu Gupta&#xff1a;我在项目中碰到了一个需求&#xff0c;需要将字符串格式的 dd/MM/yyyy 转成 DateTime&#xff0c;比如下面这样&#xff1a;class Program{static void Main(string[] args){var str "22/11/2009";DateTime date DateTime.Parse(s…

Gallery with Video

2019独角兽企业重金招聘Python工程师标准>>> 实现较为完整的图片展示和视频播放功能&#xff08;Image and video gallery&#xff09;&#xff0c;在FGallery-iPhone&#xff08; http://code4app.com/codesample/4f67f4546803fa6d45000001&#xff09;代码的基础上…

实用Python库,这几个你认识不?

近几年Python已成为数据科学行业中大火的编程语言。而作为人工智能核心的机器学习&#xff0c;是一门多领域的交叉学科&#xff0c;专门研究计算机模拟或实现人类学习行为的方法&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。简…

php输出PDF的文件流_怎么用PHP在HTML中生成PDF文件

译文&#xff1a;使用PHP在html中生成PDF译者&#xff1a;dwqs利用PHP编码生成PDF文件是一个非常耗时的工作。在早期&#xff0c;开发者使用PHP并借助FPDF来生成PDF文件。但是如今&#xff0c;已经有很多函数库可以使用了&#xff0c;并且能够从你提供的HTML文件生成PDF文档。这…

手把手教你构建WPF官方开源框架源代码

从去年微软就将 WPF 开源了&#xff0c;差不多现在所有 WPF 的源代码都开源了。在学习框架的时候&#xff0c;我会做一些改动&#xff0c;期望能构建一个自己的版本进行测试。但是作为一个特别大的框架&#xff0c;想要构建跑起来可不是直接在 VisualStudio 里面点击一下运行就…

程序员中的明星,超模or女团都是程序媛

全世界只有3.14 % 的人关注了数据与算法之美程序员改变世界已经有几十年的历史了&#xff0c;程序员出名又神秘——出名的是大家都知道程序员有多厉害&#xff0c;神秘的是外界对程序员的认知不够具体&#xff0c;“格子衫、双肩包、木讷、代码、……”程序员的标签有很多&…

php 实现类,php如何实现类

php如何实现类php实现类的方法是&#xff1a;【class 类名{ }】&#xff0c;如【<?php class Student { }】。类是由属性、方法、常量组成的&#xff0c;类名以字母、下划线开头&#xff0c;后面跟字母、数字、下划线。在PHP中实现类和对象(学习视频推荐&#xff1a;java课…

Id都是“とつくとき”这样的怎么爬,在线等,急

一般来说&#xff0c;我们推荐使用整数Id作为数据表的主键&#xff0c;这样可以提供不少好处&#xff1a;存储空间小&#xff0c;简洁易懂&#xff0c;方便分页、排序、索引。但当这种Id暴露到外部时&#xff0c;比如订单号&#xff0c;就存在一定的风险了。因为不管是自增、雪…

对象使用的两种方法

使用对象的两种方式&#xff1a; ——栈中的对象&#xff1a; CStudent stu;stu.setAge(14);cout<<"Age is :" << stu.getAge(); ——堆中的对象&#xff1a; 使用new/deleteCStudent * pStu;pStu->setAge(14);cout<<"Age is :" <…

舍不得删的12个优质公号

全世界有3.14 % 的人已经关注了数据与算法之美在信息爆炸的时代快节奏的生活里 你是否曾有一瞬间觉得忙碌而空虚&#xff1f;以下12个优质公众号能让你在闲暇的时候不断的提升自我&#xff0c;拓宽视野愿以书卷气&#xff0c;行我路千里近现代史研究通讯ID&#xff1a;jxsdyjtx…

php 实现类,php 获取页面中指定内容的实现类

本文为大家下使用php如何获取页面中的指定内容&#xff0c;而且以封装成类&#xff0c;需要的朋友可以参考下本文功能&#xff1a;1.获取内容中的url&#xff0c;email&#xff0c;image。2.替换内容中的url&#xff0c;email&#xff0c;image。url&#xff1a;xxxemail&#…

FastTunnel-开源内网穿透框架

FastTunnelFastTunnel是用.net core开发的一款跨平台内网穿透工具&#xff0c;它可以实现将内网服务暴露到公网供自己或任何人访问。与其他穿透工具不同的是&#xff1a;FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架&#xff0c;任何人都可以基于该框架二次开…

系统架构师-基础到企业应用架构-服务层

一、上章回顾 上篇我们主要讲解了系统架构中的四种架构模式&#xff0c;并且分析了四种架构模式的实现及应用场景&#xff0c;那么先来回顾下架构中的业务逻辑层的使用及总结。 如果大家对图中讲述的内容不明白或者说是不深入那么可以参考上篇讲 解的内容&#xff1a;系统架构师…

php 命名空间(,PHP命名空间(Namespace)简明教程

这一特性在 PHP5.0x 时候就提出过&#xff0c;后来被取消并安排在 PHP6 中实现。而此次又再次“提前”到了 PHP5.3 发布&#xff0c;可见开发人员对其的重视以及谨慎的态度。官方发布时说明文档的内容可能已过期(documentation maybe out dated)&#xff0c;所以在这里简单的说…

Python 10大谬论

全世界只有3.14 % 的人关注了数据与算法之美谬误 #1: Python 是一门新语言伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实&#xff0c;这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Ja…

【litrpa专题】首个rpa程序,使用litrpa采集百度地图地铁数据

RPA最近2年里红遍大江南北&#xff0c;人力成本上升&#xff0c;办公自动化势在必行&#xff0c;Excel长期肩负着办公自动化的重任&#xff0c;就算有【Excel催化剂】这些插件的把持&#xff0c;仍然有许多需求未能满足。笔者一直关注RPA领域&#xff0c;从广义来说&#xff0c…

ecshop goods.php,重命名ecshop的商品页goods.php为shangpin.php

有人说&#xff0c;将ecshop商品详情页的文件名 goods.php 改一个名字&#xff0c;对百度收录会有帮助&#xff0c;也许吧&#xff0c;这里不讨论是否有帮助&#xff0c;这里只讲解如何重命名。以下最模板的方法只供参考例如&#xff1a;我们将 goods.php 改为 shangpin.php &a…