1. public interface IEnumerable  
  2. {  
  3.     IEnumerator GetEnumerator();  
  4. }  

IEnumerator 接口

  1. public interface IEnumerator  
  2. {  
  3.     bool MoveNext();  
  4.     object Current { get; }  
  5.     void Reset();  
  6. }  

实现IEnumerable接口的话需要实现其 IEnumerator.GetEnumerator 方法,其后也是需要实现 IEnumerator接口的方法(迭代模板)

  1. public class ListEnumerator : IEnumerator  
  2. {  
  3.     private int _currentIndex = -1;   
  4.    
     
  5.     public bool MoveNext()  
  6.     {  
  7.         _currentIndex++;  
  8.    
     
  9.         return (_currentIndex < _objects.Count);   
  10.     }  
  11.    
     
  12.     public object Current  
  13.     {   
  14.         get  
  15.         {  
  16.             try  
  17.             {  
  18.                 return _objects[_currentIndex];  
  19.             }  
  20.             catch (IndexOutOfRangeException)  
  21.             {  
  22.                 throw new InvalidOperationException();  
  23.             }  
  24.     }  
  25.    
     
  26.     public void Reset()  
  27.     {  
  28.         _currentIndex = -1;  
  29.     }  

 

c#


所有集合(列表字典堆栈队列)可枚举的,因为它们实现IEnumerable接口所以字符串 可以使用foreach遍历字符串字符串每个字符

 

IEnumerabl 和 IEnumertator的更多相关文章

  1. Unity中的协程是什么?

    什么是协程? 1.协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码. 2.Unity在每一帧(Frame)都会去处理对象上的协程.Unit ...

  2. Enumerable和yield

    说说IEnumerable和yield IEnumerable数据类型是我比较喜欢的数据类型,特别是其强类型IEnumerable<T>更获得Linq的支持使得代码看起来更加优雅.整洁. ...

  3. Linq入门

    一.Linq需要的C#语法支持: 1.隐式变量的使用var var使用时必须初始化      var是强类型数据 2.自动属性:public string FirstName{get ;set;} 3 ...

  4. 《.NET 设计规范》第 9 章:常用的设计模式

    第 9 章:常用的设计模式 9.1 聚合组件 考虑为常用的特性域提供聚合组件. 要用聚合组件来对高层的概念(物理对象)进行建模,而不是对系统级的任务进行建模. 要让聚合组件的名字与众所周知的系统实体相 ...

  5. Unity协程(Coroutine)原理深入剖析再续

    Unity协程(Coroutine)原理深入剖析再续 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面已经介绍过对协程(Coroutine ...

  6. IQueryable和IEnumerable以及AsEnumerable()和ToList()的区别

    注意:本文背景为 Linq to sql .文中ie指代IEnumerable,iq指代IQueryable. IQueryable 和 IEnumerable 的区别 IQueryable 延时执行 ...

  7. 说说IEnumerable和yield

    IEnumerable数据类型是我比较喜欢的数据类型,特别是其强类型IEnumerable<T>更获得Linq的支持使得代码看起来更加优雅.整洁. 编写返回值为IEnumerable(或I ...

随机推荐

  1. git知识总结-1.git基础之数据存储

    1.前言 git包含四种对象文件: blob tree commit tag(目前没用到,暂时忽略) 2. git对象的关系   图 git三种对象关系   粗略一看,可以大致感觉出blob类似于文件 ...

  2. cURL error 60: SSL certificate problem: unable to get local issuer

    github 问题连接 https://github.com/yabacon/paystack-php/wiki/cURL-error-60:-SSL-certificate-problem:-una ...

  3. [其它]iOS 12.2支持电信VoLTE了,中国电信教你如何开通:只要三步

    iOS 12.2支持电信VoLTE了,中国电信教你如何开通:只要三步 link :https://baijiahao.baidu.com/s?id=1629039609897267682&wf ...

  4. MUI之App开发

    一般开发APP分为两种:1.原生ios和android语言开发.2.混合开发,里边穿插h5的东西. 3.第三种:现在因为前端用hbuilder工具开发的情况越来越多,这家公司又提供了更多的选择,所以近 ...

  5. 二丶Django~1

      一 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于 ...

  6. walle2.0 nginx.conf配置文件参数

    vim /usr/local/nginx/conf #user nobody; worker_processes ; events { worker_connections ; } http{ inc ...

  7. python学习-Pillow图像处理

    Pillow中文文档:https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/tutorial.html 安装:pip install pillo ...

  8. linux命令详解之df命令

    df命令概述df命令作用是列出文件系统的整体磁盘空间使用情况.可以用来查看磁盘已被使用多少空间和还剩余多少空间. df命令显示系统中包含每个文件名参数的磁盘使用情况,如果没有文件名参数,则显示所有当前 ...

  9. Spring 开发常见问题

    linux 下http 接收中文参数乱码 解决: 在application.yml配置文件中添加 spring: http: encoding: charset: GB2312

  10. VS发布IIS Express,允许外网调式(如微信开发)

    环境 VS2015 IIS Express win10操作系统 natapp内网穿透 localhost && 127.0.0.1 && 本机内网IP 产生现象:VS调 ...