C#中foreach的实现原理
2024-09-02 05:51:14
C#中foreach的实现原理
在探讨foreach如何内部如何实现这个问题之前,我们需要理解两个C#里边的接口,IEnumerable 与 IEnumerator. 在C#里边的遍历集合时用到的相关类中,IEnumerable是最基本的接口。这是一个可以进行泛型化的接口,比如说IEnumerable<User>.在微软的.NET推出了这两个接口后,才有了foreach的用法,可以说,foreach是建立在这两个接口的基础之上的,foreach的前提是其里边的容器要实现了IEnumerable接口。
IEnumerable 这个接口里边定义的内容非常简单,最重要的就是里边有一个抽象方法GetEnumerator. IEnumerable的意思是这个集合是可以遍历的,而这个GetEnumerator方法返回的IEnumerator的就是一个遍历器,用这个工具来遍历这个类。如果说IEnumerable 是一瓶香槟,那么IEnumerator就是一个开瓶器。在实现这个IEnumerable接口的时候,必须要实现这个GetEnumerator方法,要返回一个实例化的IEnumorator.
下面来介绍一下这个IEnumorator接口。这个接口中定义的内容也很简单,包括Current,就是返回这个遍历工具所指向的那个容器的当前的元素,MoveNext 方法就是指向下一个元素,当遍历到最后没有元素时,返回一个false.当我们实现一个IEnumerable类的时候,我们的目的就应该是遍历这个集合,所以同时我们要实现IEnumerator这个工具类,定义我们自己的逻辑来告诉CLR我们怎么去遍历这个集合。
最新文章
- 了解JavaScript 数组对象及其方法
- ibatis order by 防止sql注入
- Arduino中的setup()和loop()函数
- cocos2d-html5版日历组件
- BZOJ 2243: [SDOI2011]染色 (树链剖分+线段树合并)
- 初始——第一款个人开发上线app store
- Java学习之字符串练习
- C奇淫技巧,——宏神奇
- 安装程序添加iis的方法经验分享
- 尚学堂Java面试题整理
- jBPM学习之利用API完成流程实例
- Wannafly挑战赛29-A/B
- Python的程序入口 __name__属性
- <;OFFER>; 06_PrintListInReversedOrder
- 如何正确的加载和执行 JavaScript 代码
- angularJS1笔记-(10)-自定义指令(templateUrl属性)
- 2008ZJOI树的统计
- drupal7请求异常,执行时间过长的解决方法
- 基于Linux的智能家居的设计(5)
- 20145238-荆玉茗《Java程序设计》课程总结