第8章枚举器和迭代器汇编.pptx

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

您可能关注的文档

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档