for 和 foreach 的区别

Hiosh 2008-04-24 06:10:14
平时用for循环最多,用foreach不是很多

只知道foreach循环是一个只读的循环
而且感觉foreach像一个黑盒,你不知道它到底能够循环多少次;
而 for 的话就很清楚的知道循环的次数

其次,所有的for都可以用foreach代替吗?反过来所有的foreach都可以写出相应的for吗?


其他还有什么区别,请大家讨论一下吧
...全文
2832 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
秦剑 2012-05-18
  • 打赏
  • 举报
回复
foreach不必关心具体数据结构的实现(是数组不是链表),当访问的数构结构是链表时,用foreach的访问方式效率会远高于for
s32702 2009-09-24
  • 打赏
  • 举报
回复
foreach做迭代器,循环遍历还是比较方便的
dollbo_chow 2009-09-24
  • 打赏
  • 举报
回复
foreach 里面修改被遍历的对象时会出错,可是for比较灵活,可以从后往前循环,这样即使删除了最后的项,也不会出错,除非你确实不知道总数,才用foreach
bodensky 2009-09-23
  • 打赏
  • 举报
回复
for除了效率比foreach要低一些以外,对混合型的关联数组处理方面也不及foreach,因此用foreach处理数组还是非常方便。
lake_cx 2008-04-26
  • 打赏
  • 举报
回复
如果可以用for遍历的,一般来说for语句效率高,但是前提是for语句内部的索引器的实现
向来效率是在于“某某[i]”的实现方式,如果是间接寻址,效率自然没的说
foreach只能算一种简写而已,实际内容是
while (枚举器.Next())
对象 o = 枚举器.Current;
这算是语句的简写,其实根本不算循环语句,是一种方法的调用而以,与间接寻址,效率根本没法比的
与很多索引器相比,一般还是会快一些的,因为很多集合中使用的结构是类似链表,要查个“某某[i]”需要遍历很多次
wucy2008 2008-04-26
  • 打赏
  • 举报
回复


`` for循环一般是用在明确知道需要循环多少次的情况下```

` 而foreach一般用在集合和数组当中``

` foreach不论数组或集合的个数``

` 只是一个个的打印出来``

` ` ` ``不论它输出的格式``

` 至于执行效率``

` `` 应该都差不多吧``

`
hery2002 2008-04-24
  • 打赏
  • 举报
回复
视情况而定,
同等情况下,貌似foreach的效率要高于for.
zspsys 2008-04-24
  • 打赏
  • 举报
回复
foreach常用在数组遍历上
cc_net 2008-04-24
  • 打赏
  • 举报
回复
用foreach的对象需要实现枚举接口,for就不用了;

foreach一般用来读的,For一般用来操作

foreach一次处理一个对象,for可以同时处理多个

Xzoth 2008-04-24
  • 打赏
  • 举报
回复
for通常用于已知次数的循环;比如:循环输出10次Hello World
foreach通常用于遍历集合;比如:遍历List<object>

foreach性能并不差:)
jackyzsy2008 2008-04-24
  • 打赏
  • 举报
回复
没有特别需要的话,想用哪个就用哪个
vary25 2008-04-24
  • 打赏
  • 举报
回复
据说foreach比for效率高
但平时还是用for比较多
没办法
习惯了
学习中……
s407691511s 2008-04-24
  • 打赏
  • 举报
回复
如果能用foreach 就别用for,因为foreach用起来蛮好蛮简单的

假如有个集合里面的{1,2,3,4,5,6,7,8,9}

用foreach就是先声明一个相应的变量把集合里面的每个元素一个一个的赋给这个变量来做一些处理,你不用知道他执行了多少次.

for 就不用就了.

foreach用来简单,但没for功能强大,有时候还比较麻烦,比如你想循环一定次数或循环到一定条件就行了,还不如for呢
如:(还要一个变量k做标记)
public class MSILMethods
{
static void Main()
{
int[] arr=new int []{1,2,3,4,5,6,5};
int k = 0;
foreach (int i in arr)
{
k++;
if (k == 3) break;
Console.WriteLine(i);
}
}
}

一句话,看情况而定!
yudi010 2008-04-24
  • 打赏
  • 举报
回复
foreach只是遍历
效率比for要快几十倍
minioreo 2008-04-24
  • 打赏
  • 举报
回复
foreach可以不关心数组的维数 遍历二维数组和遍历一维数组是一样的 而且不用关心这个数组的下标是从0开始还是从1开始(有的语言数组下标从1开始)
不慕沙卡拉卡 2008-04-24
  • 打赏
  • 举报
回复
foreach通常用于遍历整个结合或数组,不能用于改变集合或数组的内容
overbai 2008-04-24
  • 打赏
  • 举报
回复
多用用就习惯了
changjiangzhibin 2008-04-24
  • 打赏
  • 举报
回复

/*
一般地:for 可以代替 foreach,但效率上讲后者高些,特别是集合对象
当遍历对象本身的元素需要改变时,不能用foreach,可以用for,while等
如:
*/
ArrayList arr = new ArrayList();
arr.Add(1);arr.Add(2);arr.Add(3);

foreach(int i in arr)
{
if(i == 2) arr.Remove(i);//错误
}

for(int i=0; i<arr.Count; i++)
{
if(arr[i] == 2) arr.RemoveAt(i);//正确
}
apollolb2005 2008-04-24
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20051230/11/4490365.html
tigerleq 2008-04-24
  • 打赏
  • 举报
回复
在 foreach
里你删除一个
对象试试!

加载更多回复(6)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧