为什么要用foreach来代替for

看个例子,就可以看出原因

 
        public static void Main(string[] args)
        {
            Console.WriteLine(
"进入For循环");
            
for(int i=0;i<List().Count;i++){
                Console.WriteLine(i.ToString());
            }
            Console.WriteLine(
"进入Foreach循环");
            
foreach(int i in List()){
            Console.WriteLine(i.ToString());
            }
            Console.WriteLine(
"结束");
            Console.ReadKey(
true);
        }
        
static List<int> List(){
            List
<int> l = new List<int>();
            l.Add(
1);
            l.Add(
2);
            Console.WriteLine(
"添加一次函数");
            
return l;
            
        }



执行结果如下

进入For循环
添加一次函数
0
添加一次函数
1
添加一次函数
进入Foreach循环
添加一次函数
1
2
结束


要熄灯了,虽然程序小有问题,但基本能看出for一共执行了三次函数list而foreach只执行了必要的一次,由此可见,foreach效率比for要高上许多
posted @ 2007-09-28 23:15 重典 阅读(1105) 评论(11)  编辑 收藏

  回复  引用  查看    
#1楼 2007-09-29 08:15 | 大豆男生      
for 每次循环都要检查 i<List().Count 是否成立(直到条件不成立才终止),因为 i 的初值为0,所以一共检查 List().Count + 1 次。
  回复  引用  查看    
#2楼 2007-09-29 10:16 | 王维      
我一直对这个有疑惑,前阵子在写1个程序时,特意查过,有人说这2个效率区别不是很大。
在你的程序中,如果把int count=List().Count先赋给一个值,然后再用i<count判断的话,也只需要一次了.

执行结果如下

进入For循环
添加一次函数
0
1
进入Foreach循环
添加一次函数
1
2
结束
  回复  引用  查看    
#3楼 [楼主]2007-09-29 14:36 | 邹健      
@王维
的确是这样的可以用For和用foreach用的一样好 但统一的接口的情况下似乎无精foreach更具有通用性和可扩展性
  回复  引用  查看    
#4楼 2007-09-29 20:36 | Leepy      
原来如此
  回复  引用    
#5楼 2007-09-29 23:50 | snowdoggie [未注册用户]
程序代码好诡异,似乎不能说明问题。

for的示例输出的是i,而且这种“多次调用list()”应该是代码撰写者的错误。

foreach的示例输出的是l里面的成员
  回复  引用  查看    
#6楼 [楼主]2007-09-30 09:03 | 邹健      

@snowdoggie
如果 for(int i=0;i<List().Count;i++){
Console.WriteLine(List[i].ToString());
}
应该访问次数更多未试
  回复  引用    
#7楼 2007-10-02 16:09 | snowdoggie [未注册用户]
@邹健

我的意思是说
for(int i=0;i<List().Count;i++)的写法本来有问题
有经验些的程序员都会把list().count先赋给一个值, 然后再for循环

  回复  引用  查看    
#8楼 [楼主]2007-10-02 19:03 | 邹健      
@snowdoggie
嗯,是啊^^
  回复  引用    
#9楼 2007-10-03 00:40 | snowdoggie [未注册用户]
^_^
  回复  引用  查看    
#10楼 2007-10-08 18:09 | Artech      
@snowdoggie
实际上这样做是没有必要的,List().Count会被Cache。
  回复  引用  查看    
#11楼 2008-09-29 17:18 | 逸之羊      
原来博主叫邹健啊

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: