- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章枚举器和迭代器汇编
第8章 枚举器和迭代器
8.1 枚举器
8.2 迭代器
8.1 枚举器
8.1.1 枚举器概述
例如,有以下代码:
int[] myarr = { 1, 2, 3, 4, 5 };
foreach (int item in myarr)
Console.Write({0} , item);
Console.WriteLine();
其输出是:1,2,3,4,5。为什么会这样呢?
这是因为数组可以按需提供一个称为枚举器(enumerator,或枚举数)的对象。
枚举器可用于依次读取数组中的元素,但不能用于修改基础集合,所以,不能用迭代变量(或枚举变量)item修改myarr的元素。
Array类有一个GetEnumerator方法用于返回当前使用的枚举器,除了Array类外,还有一些其他类型提供了GetEnumerator方法,凡是提供了GetEnumerator方法的类型称为可枚举类型,显然,数组是可枚举类型。
8.1.2 IEnumerator接口
枚举器是实现IEnumerator接口的类对象。
IEnumerator接口支持对非泛型集合的简单迭代,是所有非泛型枚举器的基接口,它位于命名空间??System.Collections中。IEnumerator?接口有如下public成员:
Current属性:获取集合中的当前元素。
MoveNext方法:将枚举器推进到集合的下一个元素。
Reset方法:将枚举器设置为其初始位置,该位置位于集合中第一个元素之前。
最初,枚举器被定位于集合中第一个元素的前面。Reset?方法用于将枚举器返回到此位置。在此位置上,未定义?Current。?因此,在读取?Current?的值之前,必须调用?MoveNext将枚举数定位到集合的第一个元素。
?再次调用MoveNext方法将?Current属性定位到下一个元素。如果?MoveNext越过集合的末尾,则枚举器将定位到集合中最后一个元素的后面,而且MoveNext返回?false。?
对于前面的foreach语句的代码,其执行过程如下:
调用arr.GetEnumerator()返回一个IEnumerator引用。
调用所返回的IEnumerator接口的MoveNex方法。
如果MoveNex方法返回true,就使用IEnumerator接口的属性来获取arr的一个元素,用于foreach循环。
重复②和③的步骤,直到MoveNex方法返回false为止,此时循环停止。
前面foreach语句代码的功能与以下代码是相同的:
int[] myarr = { 1, 2, 3, 4, 5 };
Enumerator ie = myarr.GetEnumerator();
while (ie.MoveNext())
Console.Write({0} ,ie.Current);
Console.WriteLine();
可枚举类型myarr和默认枚举器
8.1.3 IEnumerable接口
可枚举类型是指提供了GetEnumerator方法的类型,而GetEnumerator方法是IEnumerable接口的成员,因此可枚举类型是指实现了IEnumerable接口的类型。
IEnumerable接口支持在非泛型集合上进行简单迭代,它位于?System.Collections命名空间。IEnumerable接口只有一个public成员,即GetEnumerator方法,用于返回一个循环访问集合的枚举器IEnumerator,而IEnumerator?可以通过集合循环显示?Current?属性和?MoveNext?和?Reset?方法。
【例8.1】设计一个学生类Student和一个People类,People类包含若干学生对象,通过从IEnumerable 接口继承使其成为可枚举类型,并设计相应的枚举器类PeopleEnum(从 IEnumerator接口继承)。最后用foreach语句对People类对象执行枚举。
using System;
using System.Collections;
namespace proj8_1
{ public class Student //声明Student类
{ public int id; //学号
public string name; //姓名
public Student(int id,string name
您可能关注的文档
- 2016-2017学年先进制造技术第1章概述选编.ppt
- 2016-2017学年人教版必修二第5课《离骚》课件8选编.ppt
- 第8章互联及输入输出组织汇编.pptx
- 2016-2017学年度中期检测物理试题(共三套含答案)选编.doc
- 2015:生活用电选编.doc
- 2016-2017学年太康一高高三第二次考试化学试题选编.doc
- 2016-2017学年度第一学期期中六校联考高三地理试卷选编.doc
- 第8章住房保障法律制度2汇编.doc
- 第8章企业即时通讯系统汇编.pptx
- 2016-2017学年湖南新田县第一中学高二语文课件:第1单元+第3课《拟行路难(其四)》选编.ppt
- 沪科版(2024)七年级数学上册课件 2.1 第1课时 用字母表示数.pptx
- 沪科版(2024)七年级数学上册课件 5.2 数据的整理.pptx
- 沪科版(2024)七年级数学上册课件 4.5 第2课时 用尺规作角.pptx
- 沪科版(2024)七年级数学上册课件 4.2 线段、射线、直线.pptx
- 沪科版(2024)七年级数学上册课件 3.5 第2课时 销售问题与百分率问题.pptx
- 沪科版(2024)七年级数学上册课件 3.6 三元一次方程组及其解法.pptx
- 沪科版(2024)七年级数学上册课件 1.1 第1课时 正数和负数.pptx
- 沪科版(2024)七年级数学上册课件 4.5 第1课时 角的比较与补(余)角.pptx
- 沪科版(2024)七年级数学上册课件 1.4 第3课时 加、减混合运算.pptx
- 沪科版(2024)七年级数学上册课件 1.2 第2课时 相反数.pptx
最近下载
- 《信息技术应用创新软件适配改造成本评估规范》.pdf
- 中国行业标准 YY/T 1939-2024医疗器械细菌内毒素试验方法 重组C因子法.pdf
- 各类游资炒股心法及感悟,套利模式.pdf
- 【客户管理】龙湖客户细分及工作模式分享精华篇-102p.pptx
- 学校智慧平台管理制度范文.docx VIP
- ASME中国制造-ISO12944-5-2018 中文译稿 第5部分 防护涂料体系.pdf
- 《诫子书》公开课课件(共24张ppt)部编版语文七年级上册.ppt
- 三年级数学下册期中试卷及答案【可打印】.doc
- 关于《佛山市市级财政资金投资建设项目工程概算预算结算.doc
- 二年级上册语文选择题强化练习(一).docx
文档评论(0)