通过foreach遍历数据,实际上是调用了一个“枚举器”来遍历数据,和foreach没有任何关系,foreach只是语法上的简化而已,或者说foreach语句降低了枚举的复杂度。

凡是具有GetEnumerator()这个方法的类型都能够使用foreach来遍历。例如下图:

如果一个类型不包含GetEnumerator()这个方法,则会报错,如下图:

以上内容看看即可;

-------------------------------------------------------------------------------------------------------------------------------------------------------------

那既然Person类中没有GetEnumerator()这个方法那该如何去遍历他呢?

class Program
{static void Main(string[] args){Person p = new Person();foreach(string item in p){Console.WriteLine(item);}Console.ReadKey();}
}//1.需要让该类型实现一个名字交IEnumerable的接口,实现该接口的主要目的是为了让当前类型中增加一个名字叫GetEnumerator()的方法
public class Person:IEnumerable
{private string[] Frends = new string[]{"克烈","腕豪","艾希"}#region IEnumerable 成员//这个方法的作用就是返回一个“枚举器”public IEnumerator GetEnumerator(){//1、在这个方法中该写什么代码?return new PresonEnumerator(this.Frends)}#endregion
}public class PresonEnumerator:IEnumerator
{public PresonEnumerator(string[] fs){_friends = fs;}private string[] _friends;//一般下标都是一开始就指向了第一条的前一条private int index = -1;#region IEnumerable 成员public object Current{get{if(index >= 0 && index < _friends.Length){return _friends[index];}else{throw new IndexOutOfRangeException();//抛越界异常    }}}public bool MoveNext()//判断索引是否越界{if(index+1 < _friends.Length){index++;return ture;}return false;}public void Reset()//复位{index = -1;}#endregion
}

foreach遍历进阶_“枚举器“/GetEnumerator()方法相关推荐

  1. 新手小白进阶_枚举 enum

    1 枚举引入 Java是一门面向对象的语言,当我们创建好一个类以后,可以创建这个类的多个对象 但是一个类究竟创建多少个对象,并且对象代表的值我们是无法限制的 所以,如果开发中需要一组值,需要的数据是明 ...

  2. 如何听节拍器_节拍器使用方法

    节 拍器使用方法 节 拍器是一种可以 设 定每分 钟发 出有 规 律的特定 节 拍的机械,一般 节 拍器可以分 为 机械式和 电 子式两种.机械 节 拍器有个 带 有刻度的 钟摆 ,刻度一般从 每分 ...

  3. C#图解教程 第十八章 枚举器和迭代器

    枚举器和迭代器 枚举器和可枚举类型 第12章中,我们看到可以用foreach语句遍历数组.在本章,我们会进一步探讨数组,来看看为什么它们可以被foreach语句处理.我们还会研究如何使用迭代器为用户自 ...

  4. C# 通过接口IEnumerator让自己编写的对象/类,实现foreach遍历方法

    简单说明: 要想自己写的类实现foreach方法,那么可以继承IEnumerator来实现. 除了实现继承接口中的方法,还要实现一个GetEnumerator()方法才行,返回值是你要遍历的对象.   ...

  5. java遍历是什么意思_遍历Java String行的最佳方法是什么?

    遍历Java String行的最佳方法是什么? 目前,我正在使用类似: String[]lines = textContent.split(System.getProperty("line. ...

  6. 能用foreach遍历访问的对象需要实现____接口或声明____方法的类型

    之前面试看到一个这样的笔试题,当时只知道List和Dictionary类型可以用foreach遍历,但他两也没什么共同点啊.List是有序的,但Dictionary是无序的.回来在网上查了下才发现,他 ...

  7. 遍历对象属性_细说JS遍历对象属性的N种方法

    本人详细介绍了JS遍历对象N种方法,欢迎关注收藏. 遍历对象属性有五种方法,下图为一个场景对比图. 可以注意到两点: 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性. Objec ...

  8. windows下枚举串口的方法,超好用,跟设备管理器枚举一样

     做上位机,与设备通信,经常会用到串口.看到一些串口助手,像SSCOM,能自动扫描枚举PC的串口.所以后面的应用,我也加上自动枚举串口.  在网上找的资料,最多的是读取注册表里的内容,HKEY_LOC ...

  9. java map foreach_java foreach遍历map集合的方法案例

    java foreach遍历map集合的方法是java jdk1.8时出现的新方法,使用了Interface BiConsumer接口来实现,T代表map集合key的类型,U代表map集合Value的 ...

最新文章

  1. 计算机组装cpu用哪种好,教你电脑处理器哪款好
  2. C++随笔(2007-07-09)
  3. Linux日志系统-05:案例1-实现临时日志文件滚动分割
  4. 远哥Amoeba源码分析之:核心类说明
  5. bootstrap下拉选择框选中事件_CAD制图初学入门之CAD软件中布局功能详解
  6. Pandas的学习(1.pandas的介绍以及pandas中的Series的创建)
  7. dw连接服务器文档类型,dw怎么连接服务器的数据库
  8. JEECG V3.0 版本(jbpm5 工作流自定义+WEB UI快速开发库+代码生成器) spring mvc +hibernate
  9. php 用户数,php-获得最高数量,产品/用户数
  10. 中国大数据人才薪酬报告
  11. HCIE-Security Day1:防火墙概述、实验环境搭建、三种方式管理防火墙
  12. Charles的安装及设置
  13. 演讲实录丨侯晓迪 机器视觉:从跑分到跑路
  14. iOS开发-dispatch_once相关
  15. 杂谈——科比球鞋(Nike)全记录
  16. 最简单的Go Dockerfile编写姿势
  17. 计算机哪个按键可以和弦,钢琴键盘和弦图解大全!作曲必看!老师和家长快收藏起来...
  18. 图:美国首颗“嗅碳”卫星发射失败坠海
  19. STM32滤波电容个数和大小的确定
  20. 深度学习笔记之一—— 生翻 deeplearning(2015,Yann LeCun, Yoshua Bengio Geoffrey Hinton)

热门文章

  1. java字符串 n换行符_java切割字符串中的回车应注意是\n\r不是\n
  2. 三星emcp型号详解_嵌入式存储产品发展趋势:uMCP取代eMCP序幕拉开
  3. pyqt5实战开发主窗口加布局
  4. 【译】缓存最佳实践 max-age的陷阱
  5. Ways to 优化JAVA程序设计和编码,提高JAVA性能
  6. 转 vi 编辑器,gcc 编译器的使用
  7. 全新的基于VVC思想的页面验证js框架vtor
  8. 【Spring源码】Spring中的AOP底层原理分析
  9. Spark源码阅读02-Spark核心原理之作业执行原理
  10. Codespaces