对于数组、ArrayList、List等集合用for取值或者遍历,而Directory、Hashtable等键值对集合用foreach遍历
因为:
foreach首先在内部会copy集合到内存,然后次第逐个遍历内存中的副本集合,无法改变顺序,也没有索引下标之说。效率较for循环遍历低。
对于无法用索引下标取得元素的键值对集合(Directory等)来说,可用foreach遍历。作者: HM邱刚权 时间: 2013-3-29 15:41
其实两者都差不多,但是更偏向程序员的用法! foreach 语句用于循环访问集合,以获取程序员需要的信息,但不能用于在源集合中添加或移除项,否则可能产生不可预知的副作用。 如果需要在源集合中添加或移除项,就要使用 for 循环。for循环一般都用在计数或排序中使用,这样做也就相当于为每行数据打上序号。for循环在开发过程中占有极其重要的地位。作者: 管章鹏 时间: 2013-3-29 15:53
foreach 依赖 IEnumerable.第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a,以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束
期间GetList()方法只执行一次.
foreach (var a in GetList())
{
...
}
=
var a;
IEnumerator e = GetList().GetEnumerator();
while (e.MoveNext)
{
a = e.Current;
}
for 循环靠下标定位. list[3] 相当于 *(list + 3).
for(int i = 0; i < GetCount(); i++)
{
....
}