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是最佳的选择。 |