for跟foreach的区别

时间:2022-01-31 20:46:50
其实这俩我还是比较倾向于使用for,因为习惯了!不知道哪个效率能高点!

33 个解决方案

#1


应该是foreach 不过有些情况还是必须用到for的 比如for{}里面需要用到下标什么的

#2


各有优缺点。

#3


两个效率一样的,可以做一个试验看看,时间差不多,foreach的实现原理就是用的for
但是对于开发人员来说,foreach代码比较少,除了某些必须要用下标的情况一般还是foreach比较方便的

#4


foreach,好像必须实现接口IEnumerator才可以用的吧。

#5


引用 4 楼 pinyu 的回复:
foreach,好像必须实现接口IEnumerator才可以用的吧。

#6


foreach用于遍历实现IEnumerable接口的集合的元素,你可能无法知道当前元素在集合中是第几个
for就没有这个限制,各有优缺点

#7


foreach用来遍历未知数目的元素,如在一个页面的控件

#8


引用 6 楼 ojlovecd 的回复:
foreach用于遍历实现IEnumerable接口的集合的元素,你可能无法知道当前元素在集合中是第几个 
for就没有这个限制,各有优缺点

#9


LS误导,,,,遍历为止数目???呵呵!!!!有专门的length属性或者count属性,,,难道是未知?
string[] strNames = new string[] { "张三", "李四" };
        foreach (string strName in strNames)
        {
            strName += "Num1";//错误
        }

        for (int i = 0; i < strNames.Length; i++)
        {
            strNames[i] += "num1";
        }


从以上代码你能发现几点就算几点吧!!

提示两点:foreach遍历的时候该元素是只读的,遍历不需要其长度!!!,既然是只读,速度肯定比for快!

#10


LZ
乘法口诀

#11


foreach 比for 快,少个i++的时间

#12


foreach 

#13


引用 7 楼 shadowjl 的回复:
foreach用来遍历未知数目的元素,如在一个页面的控件

用foreach

#14


后者更快,因为会有编译优化。
忘记是那本书上讨论过,有的时候foreach比C++/C的循环结构还要快。

#15


foreach是只读的

#16


foreach 用来遍厉实现IEroumable接口的集合 每次返回的就是这个集合中的一个元素 当然有的时候用for 也可以实现
for 是单纯的用来控制迭代的。你可以把foreach看成是for 的一个子集

举个例子:计算 1+2+...+100
可以用for 却不可以用foreach

#17


关注,期待权威的解答

#18


foreach快些,尤其是循环对象和datarow时,如果光是数字循环没什么区别.
i like foreach

#19


对于这两个的说法是众说纷纭,其实是个有利弊,只要合适的时候选择合适的就可以了,楼主可以看一下这篇文章,这篇文章重视的是foreach。
当然也有文章说for效率更高。
http://www.cnblogs.com/yzxchoice/archive/2007/12/15/995949.html

#20


引用 17 楼 Hesperus 的回复:
关注,期待权威的解答

#21


聆听各位高见

#22


支持6楼这个,至于效率,一般哪个合适就用哪个吧
我一般也都是使用foreach,但是需要计数时就用for
比如:

foreach(DataRow dr in dtData.Rows){
.......
}

// 需要计数时
for(int i=0;i<dtData.Rows.Count;i++){
DataRow dr = dtData.Rows[i]; 
.......
}


引用 6 楼 ojlovecd 的回复:
foreach用于遍历实现IEnumerable接口的集合的元素,你可能无法知道当前元素在集合中是第几个 
for就没有这个限制,各有优缺点

#23


去看看《Effective C# 中文版 》条款11:优先采用foreach循环语句;里面很详细的说明了两者的区别;
前面也有人说了,性能的话是foreach快,但是为什么快的解释都是错误的或者说的不完整

#24


foreach的效率明显高于 for 
for  是一行一行的读取,而foreach是一次性读取出来。

#25


foreach是范性的,foreach比for快10倍

#26


使用foreach的集合必须实现IEnumerator,IEnumerator中有 moveNext方法,去找到下个对象。
效率不确定

#27


引用 25 楼 magic_MM 的回复:
foreach是范性的,foreach比for快10倍
那也不一定 for里也不一定就有到类型转换 啊?

#28


引用 2 楼 *8808 的回复:
各有优缺点。


你概括的很好. 你概括的很砖家

#29


引用 28 楼 wangxp111000 的回复:
引用 2 楼 *8808 的回复:
 各有优缺点。
 你概括的很好. 你概括的很砖家

本来就是啊。。。嘿嘿...
我还是喜欢用for

#30


for 

#31


foreach 更面向对象一些 for 带有一定的逻辑性质!要是循环集合的话还是foreach好吧,其他的循环还是用for吧 个人意见!

#32


如果foreach与for都能实现的功能情况下,foreach效率高于for

#33


看你怎么用了   如果  需要对队列前后座操作那么  就用for
如果  矩阵单元素平均操作foreach  或者each

#1


应该是foreach 不过有些情况还是必须用到for的 比如for{}里面需要用到下标什么的

#2


各有优缺点。

#3


两个效率一样的,可以做一个试验看看,时间差不多,foreach的实现原理就是用的for
但是对于开发人员来说,foreach代码比较少,除了某些必须要用下标的情况一般还是foreach比较方便的

#4


foreach,好像必须实现接口IEnumerator才可以用的吧。

#5


引用 4 楼 pinyu 的回复:
foreach,好像必须实现接口IEnumerator才可以用的吧。

#6


foreach用于遍历实现IEnumerable接口的集合的元素,你可能无法知道当前元素在集合中是第几个
for就没有这个限制,各有优缺点

#7


foreach用来遍历未知数目的元素,如在一个页面的控件

#8


引用 6 楼 ojlovecd 的回复:
foreach用于遍历实现IEnumerable接口的集合的元素,你可能无法知道当前元素在集合中是第几个 
for就没有这个限制,各有优缺点

#9


LS误导,,,,遍历为止数目???呵呵!!!!有专门的length属性或者count属性,,,难道是未知?
string[] strNames = new string[] { "张三", "李四" };
        foreach (string strName in strNames)
        {
            strName += "Num1";//错误
        }

        for (int i = 0; i < strNames.Length; i++)
        {
            strNames[i] += "num1";
        }


从以上代码你能发现几点就算几点吧!!

提示两点:foreach遍历的时候该元素是只读的,遍历不需要其长度!!!,既然是只读,速度肯定比for快!

#10


LZ
乘法口诀

#11


foreach 比for 快,少个i++的时间

#12


foreach 

#13


引用 7 楼 shadowjl 的回复:
foreach用来遍历未知数目的元素,如在一个页面的控件

用foreach

#14


后者更快,因为会有编译优化。
忘记是那本书上讨论过,有的时候foreach比C++/C的循环结构还要快。

#15


foreach是只读的

#16


foreach 用来遍厉实现IEroumable接口的集合 每次返回的就是这个集合中的一个元素 当然有的时候用for 也可以实现
for 是单纯的用来控制迭代的。你可以把foreach看成是for 的一个子集

举个例子:计算 1+2+...+100
可以用for 却不可以用foreach

#17


关注,期待权威的解答

#18


foreach快些,尤其是循环对象和datarow时,如果光是数字循环没什么区别.
i like foreach

#19


对于这两个的说法是众说纷纭,其实是个有利弊,只要合适的时候选择合适的就可以了,楼主可以看一下这篇文章,这篇文章重视的是foreach。
当然也有文章说for效率更高。
http://www.cnblogs.com/yzxchoice/archive/2007/12/15/995949.html

#20


引用 17 楼 Hesperus 的回复:
关注,期待权威的解答

#21


聆听各位高见

#22


支持6楼这个,至于效率,一般哪个合适就用哪个吧
我一般也都是使用foreach,但是需要计数时就用for
比如:

foreach(DataRow dr in dtData.Rows){
.......
}

// 需要计数时
for(int i=0;i<dtData.Rows.Count;i++){
DataRow dr = dtData.Rows[i]; 
.......
}


引用 6 楼 ojlovecd 的回复:
foreach用于遍历实现IEnumerable接口的集合的元素,你可能无法知道当前元素在集合中是第几个 
for就没有这个限制,各有优缺点

#23


去看看《Effective C# 中文版 》条款11:优先采用foreach循环语句;里面很详细的说明了两者的区别;
前面也有人说了,性能的话是foreach快,但是为什么快的解释都是错误的或者说的不完整

#24


foreach的效率明显高于 for 
for  是一行一行的读取,而foreach是一次性读取出来。

#25


foreach是范性的,foreach比for快10倍

#26


使用foreach的集合必须实现IEnumerator,IEnumerator中有 moveNext方法,去找到下个对象。
效率不确定

#27


引用 25 楼 magic_MM 的回复:
foreach是范性的,foreach比for快10倍
那也不一定 for里也不一定就有到类型转换 啊?

#28


引用 2 楼 *8808 的回复:
各有优缺点。


你概括的很好. 你概括的很砖家

#29


引用 28 楼 wangxp111000 的回复:
引用 2 楼 *8808 的回复:
 各有优缺点。
 你概括的很好. 你概括的很砖家

本来就是啊。。。嘿嘿...
我还是喜欢用for

#30


for 

#31


foreach 更面向对象一些 for 带有一定的逻辑性质!要是循环集合的话还是foreach好吧,其他的循环还是用for吧 个人意见!

#32


如果foreach与for都能实现的功能情况下,foreach效率高于for

#33


看你怎么用了   如果  需要对队列前后座操作那么  就用for
如果  矩阵单元素平均操作foreach  或者each