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()函数外,其他部分的功能基本上都是相同的。
这一特性使用起来非常方便,但需要付出一定的代价。
首 先,因为IEnumerator.Current属性是一个object类型的值,所以值类型(value type)集合在被foreach语句遍历 时,每个值都必须经历一次无用的box和unbox操作;就算是引用类型(reference type)集合,在被foreach语句使用时,也需要有 一个冗余的castclass指令,保障枚举出来的值进行类型转换的正确性。
其次,除了遍历时的冗余转换降低性能外,C#现有版本另一个不爽之处在于实现IEnumerator接口实在太麻烦了。通常都是由一个内嵌类实现IEnumerator接口,而此内嵌类除了get_Current()函数外,其他部分的功能基本上都是相同的。
- C#里的foreach
- java--foreach,不是jsp里的foreach
- 关于C#的Foreach
- C#的foreach
- C#的foreach
- ecshop里的foreach为什么都加上 <!-- {foreach} -->
- C#中foreach的原理
- C#中foreach的使用
- C#中的foreach的用法
- c#中foreach的使用
- C#中foreach的用法
- 理解JavaScript里的 [].forEach.call() 写法
- 理解JavaScript里的 [].forEach.call() 写法
- 理解JavaScript里的 [].forEach.call() 写法
- js里forEach函数是同步的!!!
- C# 里面Foreach与for 以及Linq的foreach
- C# foreach
- C# foreach
- Java变量类型间的相互转换
- Java开发学习笔记之四:Servlet生命周期
- 将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)
- [html]meta说明
- Java开发学习笔记之五:Servlet编程API
- C#里的foreach
- 数据结构复习篇:栈
- SQL语句大全
- 数据结构复习篇:用栈实现递归
- 递归、闭合形式解(closed form solution)
- 非Windows管理员用户调试ASP.NET应用程序
- 麦迪发誓将重创马刺小牛 火箭触底反弹称霸西部
- 国足整风 撤销队长取消李玮峰国脚资格
- 读《启动记忆》笔记(一)记忆大师的故事