首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#-IEnumerator与IEnumerable

C#-IEnumerator与IEnumerable

作者头像
祝你万事顺利
发布于 2019-08-23 09:44:52
发布于 2019-08-23 09:44:52
96422
代码可运行
举报
文章被收录于专栏:Unity游戏开发Unity游戏开发
运行总次数:2
代码可运行

IEnumerable是所有可迭代非范型类的基础接口。IEnumerable包括一个方法GetEnumerator方法,方法返回一个IEnumerator。

IEnumerator是所有非范型迭代器的基础接口。foreach语句隐藏了C#迭代器的复杂实现。推荐使用foreach代替直接操作迭代器。 迭代器可以读取集合中的数据,但是不能从底层修改集合。 初始的时候,迭代器定位在集合的第一个元素前面,在读取Current值之前需要调用一次MoveNext将迭代器驱动到第一个元素的位置。 Current一直返回相同的元素直到调用了MoveNext或者Reset方法。MoveNext将Current推进到下一个元素。 如果MoveNext之后position超出了集合的范围,MoveNext将返回false。 通过调用Reset将Current重置到第一个元素之前。

于是我们不难得出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Program
    {
        static void Main(string[] args)
        {
            Person[] peopleArray = new Person[3]
            {
                new Person("John","Smith"),
                new Person("Tom","Johnson"),
                new Person("Sue","Robon"),
            };
            People peopleList = new People(peopleArray);
            foreach (Person person in peopleList)
            {
                Console.WriteLine(person.firstName + person.lastName);
            }

            IEnumerator enumerator = peopleList.GetEnumerator();
            while (enumerator.MoveNext())
            {
                Person person = (Person)enumerator.Current;
                Console.WriteLine(person.firstName + person.lastName);
            }
        }
    }

上面两种写法是一样的,foreach是一种语法糖,简化了遍历其中的具体实现。被遍历的类通过实现IEnumerable接口和实现一个IEnumerator枚举器实现遍历功能。

使用实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Program
    {
        static void Main(string[] args)
        {
            Person[] peopleArray = new Person[3]
            {
                new Person("John","Smith"),
                new Person("Tom","Johnson"),
                new Person("Sue","Robon"),
            };
            People peopleList = new People(peopleArray);
            foreach (Person person in peopleList)
            {
                Console.WriteLine(person.firstName + person.lastName);
            }
        }
    }
    public class Person
    {
        public string firstName;
        public string lastName;

        public Person(string firstName, string lastName)
        {
            this.firstName = firstName;
            this.lastName = lastName;
        }
    }

    public class People : IEnumerable
    {
        private Person[] _people;
        public People(Person[] pArray)
        {
            _people = new Person[pArray.Length];
            for (int i = 0; i < pArray.Length; i++)
            {
                _people[i] = pArray[i];
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return (IEnumerator)GetEnumerator();
        }

        public PeopleEnum GetEnumerator()
        {
            return new PeopleEnum(_people);
        }
    }

    public class PeopleEnum:IEnumerator
    {
        public Person[] _people;
        int position = -1;
        public PeopleEnum(Person[] list)
        {
            _people = list;
        }

        Object IEnumerator.Current
        {
            get
            {
                return Current;
            }
        }

        public Person Current
        {
            get
            {
                try
                {
                    return _people[position];
                }
                catch(IndexOutOfRangeException)
                {
                    throw new InvalidOperationException();
                }
            }
        }

        public bool MoveNext()
        {
            position++;
            return (position < _people.Length);
        }

        public void Reset()
        {
            position = -1;
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
哥,项目部署上去报错:com.tongweb.web.thor.LifecycleException: Failed to start component [StandardEngine[TWNT].StandardHost[server].StandardContext[/root]]是什么原因导致的呢
哥,项目部署上去报错:com.tongweb.web.thor.LifecycleException: Failed to start component [StandardEngine[TWNT].StandardHost[server].StandardContext[/root]]是什么原因导致的呢
11点赞举报
哦 有点意思 解决了没?
哦 有点意思 解决了没?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
企业数字化规划设计和建设-对传统企业架构规划设计方法论的扩展要求
今天准备和大家聊一下,在企业的数字化规划或IT规划中,如果应用企业架构规划设计的方法,应该注意哪些要点。
人月聊IT
2025/06/24
820
企业数字化规划设计和建设-对传统企业架构规划设计方法论的扩展要求
关于业务架构基础知识的二三事儿(编号:001)
我自己出来讲业务架构到现在也算三年多了,我经常说自己是个烧冷炕的,那时候几乎没多少人在公开讲这个领域,因为虽然有大名鼎鼎的Zachman框架、TOGAF等方法论可供大家学习,但是国内企业实打实且从头到尾完整实施的案例极少。华为早在2008年就成立了企业架构部,但是出来讲企业架构也不过是这几年的事情,尤其是2022年《华为数字化转型之道》这本书出来之后,毕竟企业架构同道少,所以,2021年和2022年我也都去华为交流学习过,其实所有落地的方法论都有些区别,这是需要注意灵活的地方。
用户6900693
2023/08/29
3440
关于业务架构基础知识的二三事儿(编号:001)
关于业务架构基础知识的二三事儿(编号:002 架构联通设计)
第一篇发出后,大家看的还挺积极,有读者也发来了问题,既然客官点菜了,那东北厨子就得上灶了,必须得!
用户6900693
2023/08/29
4230
关于业务架构基础知识的二三事儿(编号:002 架构联通设计)
关于业务架构基础知识的二三事儿(编号:004 关于学习业务架构)
最近刚看到一则新闻,国资委在浙江召开央企数字化转型工作会议,总结了央企的成绩,也提到了几项要求,我摘录了其中几条:
用户6900693
2023/08/29
2300
关于业务架构基础知识的二三事儿(编号:004 关于学习业务架构)
关于业务架构基础知识的二三事儿(编号:007 关于元模型)
读者提问:我最近在对比学习BIZBOK、TOGAF、ABAE聚合架构、《华为数字化转型之道》中提到的业务架构要素(元模型),怕自己理解有偏差,您能否出一期解读不同业务架构元模型的文章,对比哪些元素相同、哪些不同
用户6900693
2023/10/08
8970
关于业务架构基础知识的二三事儿(编号:007 关于元模型)
企业架构中的业务架构规划-价值链驱动+业务能力+业务流程
今天准备再跟大家讲一讲,我们在做企业架构规划的时候,在业务架构设计里面的业务能力地图和业务流程图两者之间的一些关系。
人月聊IT
2025/06/24
1440
企业架构中的业务架构规划-价值链驱动+业务能力+业务流程
数字化转型中,如何高效设计业务架构?
数字化转型的传统过程中,企业往往不关注架构设计,或者只关注 IT 层面,未从企业架构宏观视角出发进行设计,特别是在整个企业架构中扮演着至关重要的业务架构。 业务架构是明确从企业战略计划到企业各部分如何运转的工具,其从企业的全局视角,对后续IT架构及业务运营方向提供指导。 本文我们主要介绍什么是业务架构?业务架构包括哪些主要内容?以及如何有效构建业务架构? 1 什么是业务架构 业务架构(Business Architecture)来自业务,业务最终的目的是“售出产品,换取利润”,业务是为企业产生盈利的工作和经
博文视点Broadview
2023/04/19
1.4K0
数字化转型中,如何高效设计业务架构?
企业架构 | TOGAF架构能力框架
为确保架构功能在企业中能够被成功运用,企业需要通过建立适当的组织结构、流程、角色、责任和技能来实现其自身的企业架构能力。这正是TOGAF的架构能力框架(Architecture Capability Framework)的关注点所在。架构能力框架为企业如何建立这样一种架构能力提供了一系列参考材料。不过TOGAF的架构能力框架在当前还不是一套全面的关于如何运用架构能力的模板,它只是为企业架构能力建设和运用过程中的各项关键活动提供了一系列导则和指南。
架构之家
2022/07/12
2K0
企业架构 | TOGAF架构能力框架
中台指挥官体系建设系列 八- 中台建设中技术平台的考虑
前面文章的读者对象主要是CIO/CTO、产品经理、企业架构师,这个章节的读者对象主要是企业架构师/首席架构师。本篇内容长、专业内容多,建议收藏仔细阅读。
数字化转型
2020/05/15
1.1K0
【业务架构】业务架构为企业架构的顶层
业务架构是最主要的架构;所有其他架构都可以从业务架构中派生出来,并且应该可以追溯到业务架构。 尽管任何模型都是对某些现实的抽象,但业务架构应该是业务术语中对现实最有形的表示。它为构建所有其他架构提供了业务规则和要求。该架构层维护与企业战略的联系,并使整个企业保持专注;通过这种方式,它为额外的业务改进和建立竞争优势的机会提供了极好的反馈机制。 业务架构定义了企业价值链(或流程流)及其与所有企业和外部业务实体的关系。它定义了企业必须生产什么以及如何生产以满足客户、在市场中竞争、与供应商打交道、维持运营和照顾员
架构师研究会
2022/03/08
8260
关于业务架构基础知识的二三事儿(编号:005 关于什么是业务架构)
今天晚上临时挤出点儿时间,说个重要问题,就是“业务架构”的定义,到底什么是业务架构。
用户6900693
2023/08/29
2340
关于业务架构基础知识的二三事儿(编号:005 关于什么是业务架构)
如何通过企业级业务架构(EBA)方法提升B端软件开发效能
企业级业务架构(EBA)方法源自Zachman框架和TOGAF理论。企业架构总是给人一种庞大而笨重的印象,实践往往也需要一定的时间周期,相信很多人都会怀疑这种连它自己都快不起来的实施模式会对提升B端软件开发效能有什么帮助,本文笔者就试着讨论下这个问题,同时,也跟各位读者分析分析软件工程发展至今仍有很大不足的一处“盲区”。
用户6900693
2020/09/11
1.4K0
程序员们,是时候重新关注下企业架构了!
现在很少有程序员没有听说过“中台”,但很少有程序员了解企业架构,更少有程序员会把企业架构的作用联系到数字化转型上,但这是已经涌起的趋势,是每个真正关心如何做好 B 端实现的程序员都需要具备的思维方式。想走好脚下的路,也需要多抬头看看天,所以,是时候重新关注下企业架构了,也许关注了企业架构,你会逐渐获得不一样的设计视角,会越来越知道自己写的软件有什么样的价值,而不只是有什么样的功能,这些价值最终也会转变成你自身的价值。
深度学习与Python
2021/12/13
3700
程序员们,是时候重新关注下企业架构了!
数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第四章数据架构篇
本文档为数据架构部分笔记,思维导图与知识点整理。共分为6个部分,由于页面显示原因,部分层级未能全部展开。结构如下图所示。
用户6070864
2023/03/24
5190
数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第四章数据架构篇
从业务架构视角聊聊大型商业银行的转型实践
随着云计算、大数据、区块链和 AI 以及移动互联等新一代信息技术的发展,企业数字化转型加速。市场在变,需求也在变,面对高度创新和充满不确定性的敏态业务,为快速交付高质量的软件产品或服务,企业需要有更好的业务架构设计,去适应不同阶段的业务特性。
用户6900693
2020/04/26
8630
从业务架构视角聊聊大型商业银行的转型实践
怎么区别软件架构、系统架构、解决方案架构、企业架构?
Hello 大家好,我是人月聊 IT。今天准备聊下我们经常谈到的企业架构,软件架构,解决方案架构之间的区别和联系。
人月聊IT
2025/06/26
1060
怎么区别软件架构、系统架构、解决方案架构、企业架构?
关于业务架构基础知识的二三事儿(编号:005-1 关于什么是业务架构)
业务架构的思考,从“全局化、结构化”和“目标导向”这两个基本逻辑出发,其分析基础是通过对流程和数据的分解,形成最基本的零件,也就是关于构件的定义,得有了这一地的拼图材料才能开展工作,“巧妇难为无米之炊”。
用户6900693
2023/08/29
2340
关于业务架构基础知识的二三事儿(编号:005-1 关于什么是业务架构)
【企业架构】什么是数据架构? 管理数据的框架
根据 The Open Group Architecture Framework (TOGAF),数据架构描述了组织的逻辑和物理数据资产和数据管理资源的结构。它是企业架构的一个分支,包括管理组织中数据的收集、存储、排列、集成和使用的模型、策略、规则和标准。组织的数据架构是数据架构师的职权范围。
架构师研究会
2022/07/29
1.8K1
程序员们,是时候重新关注下企业架构了!(续)
笔者有幸参加过一个在全世界范围看也少有的极为完整的大型银行企业架构转型工程,是一家国有银行,工程历时六年多,项目投入和深度都是无与伦比的。该项目采用的是 TOGAF 加 CBM 的融合型方法论,其工程情况如下图所示:
用户6900693
2021/12/26
5380
程序员们,是时候重新关注下企业架构了!(续)
构建数字化时代的个人能力框架体系-数字化能力知识地图
所以如果大家经常看我的视频的话有可能会觉得我发的视频比较的零散,或涉及到数字经济宏观政策,企业架构,云原生,AI新技术,IT项目管理,产品管理,云原生和微服务,思维框架和模型多方面的内容。
人月聊IT
2025/06/24
900
构建数字化时代的个人能力框架体系-数字化能力知识地图
推荐阅读
企业数字化规划设计和建设-对传统企业架构规划设计方法论的扩展要求
820
关于业务架构基础知识的二三事儿(编号:001)
3440
关于业务架构基础知识的二三事儿(编号:002 架构联通设计)
4230
关于业务架构基础知识的二三事儿(编号:004 关于学习业务架构)
2300
关于业务架构基础知识的二三事儿(编号:007 关于元模型)
8970
企业架构中的业务架构规划-价值链驱动+业务能力+业务流程
1440
数字化转型中,如何高效设计业务架构?
1.4K0
企业架构 | TOGAF架构能力框架
2K0
中台指挥官体系建设系列 八- 中台建设中技术平台的考虑
1.1K0
【业务架构】业务架构为企业架构的顶层
8260
关于业务架构基础知识的二三事儿(编号:005 关于什么是业务架构)
2340
如何通过企业级业务架构(EBA)方法提升B端软件开发效能
1.4K0
程序员们,是时候重新关注下企业架构了!
3700
数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第四章数据架构篇
5190
从业务架构视角聊聊大型商业银行的转型实践
8630
怎么区别软件架构、系统架构、解决方案架构、企业架构?
1060
关于业务架构基础知识的二三事儿(编号:005-1 关于什么是业务架构)
2340
【企业架构】什么是数据架构? 管理数据的框架
1.8K1
程序员们,是时候重新关注下企业架构了!(续)
5380
构建数字化时代的个人能力框架体系-数字化能力知识地图
900
相关推荐
企业数字化规划设计和建设-对传统企业架构规划设计方法论的扩展要求
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档