打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
迭代器的使用

1、C#中的迭代器的作用  http://zhidao.baidu.com/question/110561432.html

2、详解C#迭代器  http://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html

3、msdn 迭代器 http://msdn.microsoft.com/zh-cn/library/dscyy5s0(VS.80).aspx

4、C# IEnumerable和IEnumerator的区别 http://www.cnblogs.com/shaosks/archive/2011/09/27/2193270.html

一、迭代器的作用                                                                                                                                                                              

看了好几篇文章,也翻了翻《C#4.0图解教程》,还是觉得如下这段写的不错

  迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子,他是一种简化对象间通讯的模式,也是一种非常容易理解和使用的模式。简单来说,迭代器模式使得你能够获取到序列中的所有元素而不用关心是其类型是array,list,linked list或者是其他什么序列结构。这一点使得能够非常高效的构建数据处理通道(data pipeline)--即数据能够进入处理通道,进行一系列的变换,或者过滤,然后得到结果。事实上,这正是LINQ的核心模式。

在C#1中已经内建了对迭代器的支持,那就是foreach语句。使得能够进行比for循环语句更直接和简单的对集合的迭代,编译器会将foreach编译来调用GetEnumerator和MoveNext方法以及Current属性,如果对象实现了IDisposable接口,在迭代完成之后会释放迭代器。但是在C#1中,实现一个迭代器是相对来说有点繁琐的操作。C#2使得这一工作变得大为简单,节省了实现迭代器的不少工作。

二、简单代码实现:                                                                                                                                                                         

《深入理解C# 第二版》中关于C#1.0 实现迭代其的代码如下:

(1)声明IEnumerable接口

(2)实现IEnumerator接口

(3)Main()方法中的代码实现

我们发现这样手写来实现迭代器的功能代码量确实有写太大了,那么在C#2.0中就采用yield语句简单迭代

三、对以上的总结:以上是不使用接口的枚举数                                                                                                                                         

缺点:

1、Current返回的对象是object类型,对于值类型而言,在由Current返回之前必须装箱成object,在从Current获取之后,又必须再一次拆箱,如果需要操作大量的数据,会打来严重的性能问题、

2、类型不安全。值被作为对象来枚举,所以可以是任何类型,这就消除了编译时的类型检测。

四、泛型接口 IEnumerator<T>     IEnumerable<T>                                                                                                                            

IEnumerator<T>接口使用泛型来返回实际的类型,而不是object类型的引用

 

IEnumerable

 

五、由于上面的种种不便,迭代器开始闪亮登场了                                                                                                                                       

 1、迭代器可自动帮助生成可枚举类型和枚举数

使用迭代器来创建枚举数

BlackAndWhite迭代器方法返回IEnumerator<string>,MyClaa类通过返回由BlackAndWhite返回的对象来实现GetEnumerator方法

使用迭代器来创建可枚举类型

 

 

六、总结一下:                                                                                                                                                                                

(1)简单来说IEnumerable是声明式接口
       public interface IEnumerable

       {

      IEnumerator GetEnumerator();

       }

(2)IEnumerator是实现式接口

       public interface IEnumerator

       {

     object Current(get;);

            bool MoveNext();

            void Reset();

       }

(3)Collection要支持foreach进行遍历就必须实现IEnumerable,并以某种方式返回迭代器对象IEnumerator 。

 

 

 

 

 

 

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
什么是迭代器,创建并使用迭代器.为整数列表创建迭代器.为泛型列表创建迭代器 - さびしい....
【转】【C#】迭代器IEnumerable和IEnumerator
一文说通C#中的异步迭代器
C#的枚举数(Enumerator)和可枚举类型(Enumerable)
C#迭代
Linq之前的C#知识
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服