黑马程序员技术交流社区
标题:
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