for 和 foreach 的区别

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

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

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


其他还有什么区别,请大家讨论一下吧
...全文
2869 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)
内容概要:本文围绕水陆两栖无人机的任务规划与执行问题,提出了一种基于Matlab实现的智能路径规划解决方案,重点融合粒子群优化算法(PSO)与遗传算法(GA)进行三维环境下的避障路径规划。研究系统性地构建了从复杂地形建模、任务需求分析到算法设计与仿真实验的完整流程,实现了在多约束、动态障碍物等复杂环境下无人机的高效任务调度。通过对GA与PSO两种智能优化算法在路径长度、收敛速度、路径平滑度及稳定性等方面的对比分析,深入探讨了各自在无人机路径规划中的适用场景与性能差异,验证了所提方法在提升任务执行效率与安全性方面的有效性。该方案不仅适用于水陆交互通用场景,也为多模态无人系统自主导航提供了可扩展的技术框架。; 适合人群:具备一定Matlab编程能力和算法基础,从事无人机路径规划、智能优化算法研究、自动化控制或相关领域科研工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于水陆两栖无人机在复杂自然环境(如江河湖海与陆地交错区域)中的自主巡航与任务执行;②比较遗传算法与粒子群算法在三维动态路径规划中的优化性能,指导实际工程中算法选型;③为多约束条件下无人系统的自主决策与实时避障提供算法支持与仿真验证平台。; 阅读建议:建议读者结合提供的Matlab代码进行动手实践,重点关注两种算法的数学建模过程、适应度函数设计、参数调优策略及路径生成逻辑,通过仿真实验直观对比算法性能差异,深入理解智能优化算法在复杂路径规划问题中的应用机制与优化潜力。

111,129

社区成员

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

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

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