可以使用foreach遍历循环的条件

大话C#中能使用foreach的集合的实现

转自:http://www.cnblogs.com/tangzhengyue/p/3339936.html

大家都知道foreach的语法: foreach(var item in items) { Console.Writeln(item); }

通过这样一个简单的语句,就能实现遍历集合items中的所有元素。 那么,集合类(注意不是集合中的元素的类)是要满足什么条件才能用foreach遍历呢?

就像买衣服需要去找到卖衣服的人一样,要使用foreach,集合类必须要实现GetEnumerator()方法。

这里的GetEnumerator就相当于商城里的售货员,穿着统一的服装,任务就是买衣服(程序里的任务是实现遍历集合)。

当然了,售货员可以是个体户,也就是说,你可以自己直接实现GetEnumerator()方法;也可以是某个公司统一培训上岗的(程序里就是 实现了IEnumerable接口的。)只要是这个公司培训上岗的员工,一定是能够卖衣服。同理,只要实现了IEnumerable接口,就一定能够用 foreach遍历! 那么,实现了IEnumerable接口必然要重写GetEnumerator()方法。GetEnumerator()方法就让这个集合类获得了遍历的方法。 而这个遍历的方法是有一定的共性的,比如,获取当前索引对应的元素(GetCurrent)啦, 移动到下一个元素啦(MoveNext)啦,等等等等。 就好比买衣服培训一样,有一套统一的流程,大家卖衣服的流程都差不多(进货、上货、叫卖等等)。 既然这么有共性,那么就给封装成一个IEnumerator接口吧,这个接口里就包括获取当前索引对应的元素(GetCurrent)啦, 移动到下一个 元素(MoveNext)等等的方法,等待你去实现。这样,你只需要写一个实现了IEnumerator接口的类(假设是MyArrayEnumerator),构造函数里将你要写的集合类的 元素集合传进去处理。那么你再在集合类的GetEnumerator()方法里写上 return new MyArrayEnumerator()即完成了遍历集合的“上岗培训”。

总结就是:要使用foreach,集合类必须要实现GetEnumerator()方法,集合类是需要实现IEnumerator接口的类!!!!

时间: 2024-08-12 20:25:18

可以使用foreach遍历循环的条件的相关文章

java foreach遍历的前提条件

自我总结,欢迎拍砖,不胜感激! 目的: 加深foreach遍历的影响 证明:foreach遍历的前提条件是:list !=null ,而不是:list !=null && list.size() >0 说明: jdk -version : 1.6 public static void main(String[] args) { List<String> list = null; // List<String> list = new ArrayList<S

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性为什么呢?其实这与CModel实现的接口相关,接下来我们看下其实现的整个过程对于一个我们定义的model,它会继承虚类CActiveRecord,CActiveRecord类继承于CModel,如下所示: class special extends CActiveRecord { } abstract class CAct

foreach遍历循环数组

foreach有两种语法:第一种:遍历给定的 数组语句 array_expression 数组.每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元). foreach (array_expression as $value) 第二种:同上,同时当前单元的键名也会在每次循环中被赋给变量 $key. foreach (array_expression as $key => $value) 下边我们一一来讲解一下! 一.一维普通数组 与 fo

c#--foreach遍历的用法与split的用法

一. foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成.in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素.该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值.放到只读变量中去,如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行.一旦集合中的元素都已经被访问到,整个表达式的值为false,控制流程就转入到foreach块后面的执行语句. foreach语句经常与数组一起使用,下面实例将通

为什么数组没有实现Iterable接口,但可以使用foreach语句遍历

在Java中,对于数组为什么能够使用foreach语句一直感觉很困惑. 对于能够使用foreach语句进行遍历的对象,只有两种情况,其中一种是遍历对象必须实现Iterable接口,实现ierator()方法,这是对象使用foreach语句的前提.另外一种情况就是特殊对象数组.那么对于数组可以使用foreach该如何去理解呢? 首先需要说明的是,实现了java.lang.Iterable接口的对象可以用for-each去遍历,但是能用for-each去遍历的不一定实现了该接口,比如数组这个特殊对象

编写高质量代码改善C#程序的157个建议——建议17:多数情况下使用foreach进行循环遍历

建议17:多数情况下使用foreach进行循环遍历 由于本建议涉及集合的遍历,所以在开始讲解本建议之前,我们不妨来设想一下如何对结合进行遍历.假设存在一个数组,其遍历模式可以采用依据索引来进行遍历的方法:又假设存在一个HashTable,其遍历模式可能是按照键值来进行遍历.无论是哪个集合,如果他们的遍历没有一个公共的接口,那么客户端在进行遍历时,相当于是对具体类型进行了编码.这样一来,当需求发生变化时,必须修改我们的代码.而且,由于客户端代码过多地关注了集合内部的实现,代码的可移植性就会变得很差

python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器

python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 注: 本节代码是基于 Django 1.8,但 Django 1.4 - Djagno 1.9 操作流程也是一样的. 后文给出示例代码可以在 Django 1.4.x 到 Django 1.9.x 上运行. 不过还是强调一点,一点要动手敲代码!不要偷懒哦,动手才能学到真东西. 1. 创建一个 zqxt_tmpl 项目,和一个 名

php foreach 遍历细节探讨

foreach 也是正常的语法循环结构,可以有 break 和 continue 等操作 遍历过程中值变量传递默认是值传递 输出结果为: 遍历过程中值变量可以认为设定为引用传递:foreach($数组名 as $key => & $value){...} 见演示 输出结果为: 这里需要注意的是:值变量$value可以使用引用传递,但是$key不可以使用引用传递,如果使用则会报错. foreach 默认是原数组上进行遍历,但是如果在遍历过程中进行了某种修改或某种指针操作,则会复制数组后在复制后

Swift学习笔记五:循环和条件语句

一.循环语句 1. for循环 1) for -in 循环,对于数据范围,序列,集合等中的每一个元素,都执行一次 for a in 0...5{}    //循环迭代,从a=0到a=5,执行{}里的代码 注意:a只循环中存在,也就是出了{}a就不存在了 或者遍历数组 let a = [1,2,3] for b in a{} //循环迭代,从b=1到b=3 如果你不需要序列中的每一个值,可以使用_来忽略它,仅仅只是使用循环体本身: for _ in 0...5{}    //循环执行{}里的代码,