for 和foreach的区别

for 和foreach的区别

1.for循环并不依赖于数组或其他形式的组式数据结构,只是简单的

  在调用了代码后,进行一个判断,判断是否要继续。
  (非常类似于do..while和while循环)

2.foreach循环如果作用在一个基于System.Array的类型之上的数组的话,编译器会自动优化成与for循环非常类似
  的代码,只是调用的指命有细微的差别,并且检查(包括编译阶段和运行时)会比for严格的多

3.foreach循环作用在一个非System.Array类型上(且一定要是实现了IEnumerable接口的类),会先调用
  IEnumerable.GetEnumerator()方法获取一个Enumertor实例,再在获取的Enumertor实例上调用

  GetCurrent()和MoveNext()方法,最后判断如果Enumertor实例如果实现了IDispose接口,就自动调用

  IDispose.Dispose()方法!


  那么我们应该分别在那些地方用for和foreach呢?


1.在有对所循环的本体(System.Array)做赋值操作时,尽量不要用Foreach()。

2.foreach比for更灵活。(可在MoveNext()和GetCurrent()里编写自己的代码).
 自己编写的类如果实现了IEnumerable接口的话,就可以用foreach循环了,而不管内部是否有一个真实的数组,
 并且可以自定义循环的规则。
3.从OO的原则看,foreach循环更适于多数情况的使用
 (事实上,foreach的实现是典型的Iterator模式,下面有简单的描述它的好处)
 想用统一的调用循环接口时,foreach是最佳的选择
 (MS有很多类就是这样的,例如前面提到的DataRowCollection.)
  
4.如果Foreach的作用在一个string[]类型的数组( 例如上面的代码改为 : foreach(int s in array) )
  这种错误在编译时就能检测出来,提示:Cannot convert type 'string' to 'int'

5 要确保Foreach遍历过程顺利完成,必须保证遍历过程中不更改集合的内容,
  因此,确保遍历可靠的原则是只在一个线程中使用这个集合,或者在多线程中对遍历代码进行同步。

  这也能解释为什么C#.NET在Foreach上要做严格的使用限制,而For则没有。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值