黑马程序员技术交流社区

标题: for循环和foreach循环有什么区别 [打印本页]

作者: 梁永斌    时间: 2012-8-7 14:09
标题: for循环和foreach循环有什么区别
for循环和foreach循环有什么区别,从入学基础视频里只学到for循环却不知道foreach循环,详细点的
作者: 许庭洲    时间: 2012-8-7 14:16
1,for循环语法
     for(int i=0;i<10;i++)
    {
           //执行体内代码 。这种循环,执行顺序是,先定义一个i赋值i=0,然后判断了i是不是小于某个数,如果小于,那么就执行体内代码 ,不满足就跳出循环
    }


2,foreach语法
     int[] intAry = new int[]{1,2,3,45,6,7,8};
     foreach(int i in intAry)
     {
            //其实它就是把一个数组或者集合里的东西遍历一遍;但要想支持foreach,那么必须实现IEnumble接口;不然没法遍历;
     }
    容易出错的地方:如果你要去对一个字符串遍历,那么他会出错的;
    比如:string str = “1234567890”;
             foreach(chari c str )
             {
                     //这里应该就会出错了,你应该先把这个str转换成char[] 再遍历它,至于转换方式,采用String.ToCharArray 方法;
             }

作者: 梁永斌    时间: 2012-8-7 16:19
{:soso_e183:}
作者: 梁健1    时间: 2012-8-7 18:18
并且foreach()循环是只读操作
作者: 董蒙蒙    时间: 2012-8-7 23:22
本帖最后由 董蒙蒙 于 2012-8-7 23:23 编辑

for 循环:要给初值,末值,和步长
foreach 不需要事先给定初值,末值和步长,例如for ,foreach 同时遍历数组
int[] array = { 1,2,3,4,5,6};
            for (int i = 0; i < array.Length; i++)
            {
                Console.Write(array);
            }
            foreach (int a in array)
            {
                Console.Write(a);
            }

作者: 郑根旺    时间: 2012-8-7 23:56
for循环可以从数组中读取元素,也可以重新为数组的元素进行赋值、交换、删除等操作
foreach只能从数组中读取元素而不能重新赋值,它只是只读
作者: 柏森仁    时间: 2012-8-8 12:54
foreach只是for一个封装而已,内部调用的for。

foreach根据字面的理解就可以看出它是用来遍历的,也就是说可以不管要遍历的个数或者长度,只要是你要遍历的类型就可以一个一个遍历过去,用起来很方便啊,比如说遍历当前页面中的textbox,不用知道总个数,直接用foreach就可以遍历所有的textbox,然后对他们进行操作,比for容易多了。
作者: 王峰    时间: 2012-8-8 17:07
一般地: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]”需要遍历很多次


作者: 肖攀    时间: 2012-8-8 22:55
for循环用的还是比较多的,foreach多用在DateSet和DateTable中进行遍历的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2