在开发中我们经常会用到 IEnumerable<T> xxx 或者 List<T> xxx 这种集合或者集合接口,实际上就是一个线性表嘛然后结合C#提供的语法糖 foreach 遍历 用起来真的是清甜,哈哈,闲话不多说 下面直奔主题1.枚举器和可枚举类型
foreach语句可以循环一次取数组中元素的原理:数组可以提供一个枚举器Enumerator的对象,枚举器可以知道元素的次序。
获取一个对象枚举器的方法是调用对象的GetEnumerator方法。实现了GetEnumerator方法的类型叫做可枚举类型Enumerable。
2 IEnumerator接口
实现了IEnumerator接口的枚举器包含3个函数成员:Current、MoveNext以及ReSet
IEnumerator接口 可以看到 GetEnumerator() 抽象方法 并且返回的是IEnumerable 对象
IEnumerator 接口 三个 抽象成员 Current 当前对象 foreach 中 遍历的的 item项 应该就是返回的这个属性 MoveNext()方法 移动到下一个元素这里有没有想起 Node * next 啊 哈哈哈~(忽略) 当然 IEnumerator<T> 必然也是 继承IEnumerator的

下面 我就写一个 QueueList<T> 来实现下IEnumerable<T> 当然接口IEnumerable<T> 也是是继承IEnumerable的 这里就不贴码了
 public class QueueList<T> : IEnumerable<T>{public T[] list =new T[50]; // 并不严谨望广大网友更正public int length;public int index =0;public IEnumerator<T> GetEnumerator(){return new QueuelistEnumerator<T>(this);}public void Add(T element){list[index] = element;length++;index++;}IEnumerator IEnumerable.GetEnumerator(){throw new NotImplementedException();}}

这里用数组模拟下 因为我们常用的list是不限长度的可以自动扩容 而我这个可以明显的看到当 QueueList中的元素超过50时候就会报错了 暂时就用这个代替下接下来 枚举器类 QueuelistEnumerator<T>继承 IEnumerator<T>
  public class QueuelistEnumerator<T> : IEnumerator<T>{private T current;// public T Current =>current;public T Current { get { return current; } }object IEnumerator.Current => throw new NotImplementedException();public int index;public QueueList<T> queuelist;public QueuelistEnumerator(QueueList<T> _list){queuelist = _list;index = -1;}public void Dispose(){}public bool MoveNext(){if (index < queuelist.length - 1){current = queuelist.list[++index];return true;}else{current = default(T);return false;}}public void Reset(){index = -1;}}

接下来我们就测试下 QueueList<T>

效果还行哦 哈哈~ 不是很完备还请大佬们多多指正.......
 

转载于:https://www.cnblogs.com/luizhi/p/9574155.html

关于IEnumeratorT泛型枚举器 和 IEnumerableT相关推荐

  1. C#图解教程 第十八章 枚举器和迭代器

    枚举器和迭代器 枚举器和可枚举类型 第12章中,我们看到可以用foreach语句遍历数组.在本章,我们会进一步探讨数组,来看看为什么它们可以被foreach语句处理.我们还会研究如何使用迭代器为用户自 ...

  2. Java心得--键值、枚举器

    1. 集(Set):和数学上的"集合"概念相对应,是最简单的一种集合. Set集合中不区分元素的顺序,因此也就不记录元素的加入顺序. Set集合中不包含重复元素,即任意的两个元素e ...

  3. 基础【循环】-----(枚举器)------(转)

    Iterator:枚举器 如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.这在C# 2.0中比 C# 1.1更容易实现一些.作为演 ...

  4. C# 入门(14) 枚举器(enumerator)和迭代器(iterator)

    C#的枚举器和迭代器 参考书籍: <C#图解教程> 枚举器一般用来foreach的,而迭代器在Unity中常用来当协程(Coroutine)用. 枚举器 IEnumerator接口 实现I ...

  5. 黑马程序猿——C#枚举器深入解析

    ------- Java培训.Android培训.iOS培训..Net培训 .期待与您交流!  ------- 废话不说了,上码,如果你可以一眼看穿下面这段代码的执行流程,请您就飘过吧(这段代码摘抄自 ...

  6. foreach遍历进阶_“枚举器“/GetEnumerator()方法

    通过foreach遍历数据,实际上是调用了一个"枚举器"来遍历数据,和foreach没有任何关系,foreach只是语法上的简化而已,或者说foreach语句降低了枚举的复杂度. ...

  7. ATL中集合和枚举器

    一.实现枚举器 typedef std::vector< std::string > ContainerType; typedef VCUE::GenericCopy<VARIANT ...

  8. labview数据枚举数据服务器,枚举器报告'未指定的错误,不能枚举服务器

    Dear all 实在没办法了.希望大家能帮帮忙! 这两天突然连接不上数据库了.我用的是vb和vb.net,不关代码的事,因为前段时段时间都好好的,这两天在搞.net就突然不行了.怎么查都查不出,我用 ...

  9. WPF——专用枚举器ListBox和ComboBox

    目录 介绍 提供了什么 本地定义的枚举器 代码 EnumItemList集合和EnumItem集合项 附加属性 使用代码 结束语 下载控件-141.8 KB 介绍 几天前,我发布了这篇文章,其中描述了 ...

  10. WPF——创建可观察的枚举器

    目录 介绍 问题与解决方案 使用代码 兴趣点 介绍 我坐在那里试图回忆起我多年来遇到的与WPF相关的编程问题,并且想起了其中一个涉及创建可观察的枚举器值集合的问题.这很早以前就发生在我身上,我无法找到 ...

最新文章

  1. mfc cef cefsettings 单进程 退出_PyTorch 64.进程池Pool的imap方法
  2. 013_JDK的Collections类的sort方法的实现
  3. python笔记之 inputprintformat函数
  4. 10自带sftp服务器_WinSCP v5.15.3 免费的 开源图形化 SFTP 客户端
  5. 创建型模式——单例模式
  6. Asp.Net WebForm生命周期的详解
  7. 为什么PostgreSQL是最先进的开源数据库
  8. \ d效率低于[0-9]
  9. 熊猫烧香病毒作者再被捕 开网络赌场敛财
  10. 搭建机器人电控系统——什么是单片机MCU?如何选择单片机?
  11. html转换为pdf教程,html如何转换为pdf
  12. 奖金100万!北大“韦神”,获奖了!
  13. unity之摇杆和NPC
  14. 智能清晰锐化磨皮图片处理软件Perfectly Clear 3.8.0.1665 汉化版
  15. linux系统ps命令的参数a与-a表示的讨论
  16. xp计算机无法远程桌面连接,XP sp3系统下远程桌面不能连接到指定计算机的解决方案...
  17. JZOJ5498. 【清华集训2017模拟12.10】大佬的难题
  18. 如何把手机证件照压缩到10K?手机怎么压缩照片到10K?
  19. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(1)- 环境搭建(Python2.7.14 + pySerial3.4 + wxPython4.0.3)...
  20. 利用28335的epwm产生spwm波的总结

热门文章

  1. Word文档分割总结
  2. 分享:ViewState压缩方法
  3. 《统计学习方法》读书笔记
  4. 【论文阅读】Fully Convolutional Networks for Semantic Segmentation
  5. 没有什么不可能!郴州女孩江梦南,从双耳失聪到清华博士!
  6. 你一直在用的Beam Search,是否真的有效?
  7. 20200318_抓取51job招聘数据存数据库
  8. PyTorch学习—3.pytorch实现线性回归
  9. 深度学习TF—6.神经网络过拟合及reduce overfitted
  10. 深度学习2.0-32.经典卷积网络VGG,GoogleNet,Inception-1