IEnumerable及IEnumerator 详解.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
初学C#的时候,老是被IEnumerable、IEnumerator、ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质。 下面我们先看IEnumerable和IEnumerator两个接口的语法定义。其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。IEnumerator对象有什么呢?它是一个真正的集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有IEnumerator对象才能访问集合中的项,假如连集合中的项都访问不了,那么进行集合的循环遍历是不可能的事情了。那么让我们看看IEnumerator接口有定义了什么东西。看下图我们知道IEnumerator接口定义了一个Current属性,MoveNext和Reset两个方法,这是多么的简约。既然IEnumerator对象时一个访问器,那至少应该有一个Current属性,来获取当前集合中的项吧。 MoveNext方法只是将游标的内部位置向前移动(就是移到一下个元素而已),要想进行循环遍历,不向前移动一下怎么行呢? 详细讲解: 说到IEnumerable总是会和IEnumerator、foreach联系在一起。 C# 支持关键字foreach,允许我们遍历任何数组类型的内容: //遍历数组的项 int[] myArrayOfInts = {10,20,30,40}; foreach(int i in my myArrayOfInts) { ??? Console.WirteLine(i); } 虽然看上去只有数组才可以使用这个结构,其实任何支持GetEnumerator()方法的类型都可以通过foreach结构进行运算。 [csharp]? HYPERLINK /byondocean/article/details/6871881 \o view plain view plain HYPERLINK /byondocean/article/details/6871881 \o copy copy public?class?Garage?? {?? ????Car[]?carArray?=?new?Car[4];??//在Garage中定义一个Car类型的数组carArray,其实carArray在这里的本质是一个数组字段?? ?? ????//启动时填充一些Car对象?? ????public?Garage()?? ????{?? ????????//为数组字段赋值?? ????????carArray[0]?=?new?Car(Rusty,?30);?? ????????carArray[1]?=?new?Car(Clunker,?50);?? ????????carArray[2]?=?new?Car(Zippy,?30);?? ????????carArray[3]?=?new?Car(Fred,?45);?? ????}?? }?? 理想情况下,与数据值数组一样,使用foreach构造迭代Garage对象中的每一个子项比较方便: [csharp]? HYPERLINK /byondocean/article/details/6871881 \o view plain view plain HYPERLINK /byondocean/article/details/6871881 \o copy copy //这看起来好像是可行的?? lass?Program?? ???{?? ???????static?void?Main(string[]?args)?? ???????{?? ???????????Console.WriteLine(*********Fun?with?IEnumberable/IEnumerator************\n);?? ???????????Garage?carLot?=?new?Garage();?? ?? ???????????//交出集合中的每一Car对象吗?? ????????????foreach?(Car?c?in?carLot)?? ???????????{?? ???????????????Console.WriteLine({0}?is?going?{1}?MPH,?c.CarName,?c.CurrentSpeed);?? ???????????}?? ?? ???????????Console.ReadLine();?? ???????}?? ???}?? 让人沮丧的是,编译器通知我们Garage

文档评论(0)

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

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

1亿VIP精品文档

相关文档