C#里的foreach

来源:互联网 发布:汉仪字体下载 mac版本 编辑:程序博客网 时间:2024/04/27 17:11
C#语言从VB中吸取了一个非常实用的foreach语句。对所有支持IEnumerable接口的类的实例,foreach语句使用统一的接口遍历其子 项,使得以前冗长的for循环中繁琐的薄记工作完全由编译器自动完成。支持IEnumerable接口的类通常用一个内嵌类实现IEnumerator接 口,并通过IEnumerable.GetEnumerator函数,允许类的使用者如foreach语句完成遍历工作。

这一特性使用起来非常方便,但需要付出一定的代价。

首 先,因为IEnumerator.Current属性是一个object类型的值,所以值类型(value type)集合在被foreach语句遍历 时,每个值都必须经历一次无用的box和unbox操作;就算是引用类型(reference type)集合,在被foreach语句使用时,也需要有 一个冗余的castclass指令,保障枚举出来的值进行类型转换的正确性。

其次,除了遍历时的冗余转换降低性能外,C#现有版本另一个不爽之处在于实现IEnumerator接口实在太麻烦了。通常都是由一个内嵌类实现IEnumerator接口,而此内嵌类除了get_Current()函数外,其他部分的功能基本上都是相同的。 
原创粉丝点击