A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李稳023 中级黑马   /  2014-2-10 15:08  /  2007 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是否能用foreach给数组进行赋值呢?

6 个回复

倒序浏览
在foreach外面申明一个int类型的变量,foreach里首先对该变量进行++ ,然后以该变量作为数组下标为数组赋值。。。。
但如果这样,其实用for不是更好么?
回复 使用道具 举报
我的一点点理解
for 你先要给初始值,结束的值,还有步长;foreach 不需要事先给定这些,他是自动遍历给定的集合体的所有值
回复 使用道具 举报
本帖最后由 流失的温度0 于 2014-2-10 19:05 编辑

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

评分

参与人数 1技术分 +1 收起 理由
陈福军 + 1

查看全部评分

回复 使用道具 举报
for是循环语句,适用于很多种需要循环的情况,遍历数组只是其用处之一。
foreach语句可以依次读取一个可迭代(IEnumerable)对象(例如数组,字符串,集合等)中的元素。对于数组而言,foreach语句允许我们连续访问数组中的每一个元素,它从数组的第一个元素开始并把它赋值给迭代变量。由于迭代变量的值是只读的,所以它不能改变。
回复 使用道具 举报
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是最佳的选择。

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

回复 使用道具 举报
区别1:for需要下标   foreach不需要
区别2:for可以改值   foreach不可改值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马