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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵雅晴 中级黑马   /  2012-10-7 10:50  /  2246 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

foreach和for都可以遍历数组 集合等 不同点有for可以倒着遍历 但是foreach不行 还有什么不同点呢?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

倒序浏览
foreach是只读的,for可以读写...
回复 使用道具 举报
一般地: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);//正确
}

=======================================================
如果能用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);
            }
        }
    }

一句话,看情况而定!
============================================
1、foreach常用在数组遍历上
2、用foreach的对象需要实现枚举接口,for就不用了;

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

        4、foreach一次处理一个对象,for可以同时处理多个  
5、for通常用于已知次数的循环;比如:循环输出10次Hello World
              foreach通常用于遍历集合;比如:遍历List <object>
====================================================================
如果可以用for遍历的,一般来说for语句效率高,但是前提是for语句内部的索引器的实现
向来效率是在于“某某[i]”的实现方式,如果是间接寻址,效率自然没的说
foreach只能算一种简写而已,实际内容是
while (枚举器.Next())
  对象 o = 枚举器.Current;
这算是语句的简写,其实根本不算循环语句,是一种方法的调用而以,与间接寻址,效率根本没法比的
与很多索引器相比,一般还是会快一些的,因为很多集合中使用的结构是类似链表,要查个“某某[i]”需要遍历很多次

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
刚刚学到——>foreach需要实现IEnumerable接口或者声明GetEnumerator方法的类型才能遍历访问的对象!
个人的理解是foreach是很自然的遍历对象,而for是可以有初始化条件,循环结束条件的,功能上有差别,且for用的较多。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
for 要赋初值,范围,和长度

foreach 不需要给定初值,范围和长度,是自动遍历给定的集合体的所有值

string[] a=new string[]{"a","b"}

for(i=0;i<a.length;i++)
{
Response.write(a[i].ToString())
}

foreach(string b in a)
{
Response.write b
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马