黑马程序员技术交流社区

标题: foreach和for循环遍历数组的区别? [打印本页]

作者: 李稳023    时间: 2014-2-10 15:08
标题: foreach和for循环遍历数组的区别?
是否能用foreach给数组进行赋值呢?
作者: 琦翔q    时间: 2014-2-10 16:23
在foreach外面申明一个int类型的变量,foreach里首先对该变量进行++ ,然后以该变量作为数组下标为数组赋值。。。。
但如果这样,其实用for不是更好么?
作者: 黑马郭    时间: 2014-2-10 17:21
我的一点点理解
for 你先要给初始值,结束的值,还有步长;foreach 不需要事先给定这些,他是自动遍历给定的集合体的所有值
作者: 流失的温度0    时间: 2014-2-10 18:04
本帖最后由 流失的温度0 于 2014-2-10 19:05 编辑

for的话需要给出三个条件,foreach则不需要给条件,自动遍历。foreach 语句用于循环访问集合,以获取需要的信息,但不能用于在源集合中添加或移除项,否则可能产生不可预知的副作用。 如果需要在源集合中添加或移除项,请使用 for 循环。


作者: 潘金锋    时间: 2014-2-10 19:17
for是循环语句,适用于很多种需要循环的情况,遍历数组只是其用处之一。
foreach语句可以依次读取一个可迭代(IEnumerable)对象(例如数组,字符串,集合等)中的元素。对于数组而言,foreach语句允许我们连续访问数组中的每一个元素,它从数组的第一个元素开始并把它赋值给迭代变量。由于迭代变量的值是只读的,所以它不能改变。
作者: mtlmzb    时间: 2014-2-10 19:49
1、for循环并不依赖于数组或其他形式的组式数据结构,只是简单的
在调用了代码后,进行一个判断,判断是否要继续,非常类似于do..while和while循环。

2、foreach循环如果作用在一个基于System.Array的类型之上的数组的话,编译器会自动优化成与for循环非常类似
的代码,只是调用的指命有细微的差别,并且检查(包括编译阶段和运行时)比for更严格。

3.foreach循环作用在一个非System.Array类型上(且一定要是实现了IEnumerable接口的类),会先调用
IEnumerable.GetEnumerator()方法获取一个Enumertor实例,再在获取的Enumertor实例上调用
GetCurrent()和MoveNext()方法,最后判断如果Enumertor实例如果实现了IDispose接口,就自动调用
IDispose.Dispose()方法!

那么我们应该分别在哪些地方用for和foreach?
建议如下:
1、在有对所循环的本体(System.Array)做赋值操作时,尽量不要用Foreach()。

2、foreach比for更灵活。(可在MoveNext()和GetCurrent()里编写自己的代码)。

自己编写的类如果实现了IEnumerable接口的话,就可以用foreach循环了,而不管内部是否有一个真实的数组,
并且可以自定义循环的规则。

3、从OO的原则看,foreach循环更适于多数情况的使用
事实上,foreach的实现是典型的Iterator模式,想用统一的调用循环接口时,foreach是最佳的选择。
作者: §風過無痕§    时间: 2014-2-11 09:42
区别1:for需要下标   foreach不需要
区别2:for可以改值   foreach不可改值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2