参考网址:https://blog.csdn.net/qq_39806817/article/details/115024666

一、IEnumerable简单介绍
IEnumerable是可枚举类型,一般在迭代时应用广泛,如foreach中要循环访问的集合或数组都实现了IEnumerable接口。只要能够遍历,都直接或间接实现了IEnumerable接口。如:String类型的对象,可遍历,输出时以字符输出,间接实现了IEnumerable接口,"OOP"遍历打印就是'O','O','P';又如int类型没有实现IEnumerable接口,就无法依赖foreach遍历。
二、实现IEnumerable接口
现以一个实例遍历数组:
IEnumerableTest enumerableTest = new IEnumerableTest();
enumerableTest.Show();

-------------------------------------------------------
public class IEnumerableTest
{
  DemoIEnumerable demoIEnumerable = new DemoIEnumerable();
  public void Show()
  {
    foreach (var item in demoIEnumerable)
    {
      Console.WriteLine(item);
    }
  }
}

public class DemoIEnumerable : IEnumerable
{
  public IEnumerator GetEnumerator()
  {
    string[] students = new[] { "瑶瑶1", "瑶瑶2", "瑶瑶3" };
    return new TestEnumerator(students);
  }
}

public class TestEnumerator : IEnumerator
{
  private string[] _students;
  //元素下标
  private int _position = -1;

  public TestEnumerator(string[] students)
  {
    this._students = students;
  }

    //public object Current => throw new NotImplementedException();
  public object Current
  {
    get
    {
      if (_position == -1 || _position >= _students.Length)
      {
        throw new InvalidOperationException();
      }
      return _students[_position];
    }
  }

  public bool MoveNext()
  {
    if (_position < _students.Length - 1)
    {
      _position++;
      return true;
    }
    return false;
  }

  public void Reset()
  {
    _position = -1;
  }
}
上面的实例执行foreach步骤:首先进入DemoIEnumerable类执行GetEnumerator()方法,然后初始化_position=-1,接着执行TestEnumerator类的构造函数,然后返回进入in,执行TestEnumerator类的MoveNext()方法,判断下标(_position)是否越界,如没有越界,下标自动加1,并返回true,然后获取TestEnumerator类的Current属性,返回对应下标的值,依次迭代,获取数组的值,直至结束。

C#中IEumerable的简单了解的更多相关文章

  1. asp.net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  2. Linux中vim的简单配置

    本文主要分享Linux中vim的简单配置 ★配置文件的位置     在目录/etc.下面,有个名为vimrc的文件,这就是系统中公共的vim配置文件,对所有用户都开放.而在每个用户的主目录下,都可以自 ...

  3. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  4. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  5. 动端逐渐出了许多的移动端的框架,比如Sencha Touch、JQTouch、Jquery-moblie、jqMobi等等。这些框架都有优缺点,不同的框架应用在不同的项目中。现简单阐述一下各框架的优缺点:

    移动前端工作的那些事---前端制作之微信小技巧篇   (2013-11-15 15:20) 转载▼ 标签: it css3/javascript html5 webapp 手机网站搭建 分类: 前端制 ...

  6. PHP5中PDO的简单使用

    PHP5中PDO的简单使用 标签: php数据库mysql扩展extensionexception 2012-05-06 10:27 27753人阅读 评论(0) 收藏 举报  分类: PHP(6)  ...

  7. [原创]Android中LocationManager的简单使用,获取当前位置

    Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置:注册/注销来自某个 LocationProvider的周期性的位置更新:以及注册/注销接近 ...

  8. PhotoShop中画圆角矩形最简单方法(图文并茂)!

    PhotoShop中画圆角矩形最简单方法(图文并茂)! 1. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHhubjUyMA==/font/5a6L5L ...

  9. iOS 项目中的NSNotification简单使用

    iOS中NSNotification的简单使用 好久没有写过博客了,总是遇到问题查一下,今天查的又是一个老问题,想了想,还是记录一下!今天在项目开发中遇到一个配置及时性处理的问题,想了想之后决定用通知 ...

随机推荐

  1. Python - r'', b'', u'', f'' 的含义

    字符串前加 f(重点!敲黑板!) 作用:相当于 format() 函数 name = "帅哥" age = 12 print(f"my name is {name},ag ...

  2. MySQL字符串操作函数

    使用方法:concat(str1,str2,-)   返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11',' ...

  3. FTP传输

    FTP传输                    一.FTP服务–用来传输文件的协议                    二.设置匿名用户访问的FTP服务(最大权限)                 ...

  4. C语言:预处理命令总结

    预处理指令是以#号开头的代码行,# 号必须是该行除了任何空白字符外的第一个字符.# 后是指令关键字,在关键字和 # 号之间允许存在任意个数的空白字符,整行语句构成了一条预处理指令,该指令将在编译器进行 ...

  5. Map集合笔记

    一.Map集合的特点 Map集合是一个双列集合 Map中的元素,key和value的数据类型可以相同,也可以不同. Map中的元素,key是允许重复的,value是可以重复的 Map中的元素,key和 ...

  6. MYSQL时间戳和日期相互转换 笔记整理

    相关函数: date_format(date, format) 函数,MySQL日期格式化函数date_format() unix_timestamp() 函数 str_to_date(str, fo ...

  7. P6106 [Ynoi2010] Self Adjusting Top Tree

    P6106 [Ynoi2010] Self Adjusting Top Tree 题意 给出平面直角坐标系上若干不与坐标轴平行的处于第一象限的互不相交的线段,多次询问平面中一个第一象限的矩形与这些线段 ...

  8. Oracle导入dmp文件:ORACLE错误12899而拒绝行的问题如何解决

    原文链接:https://www.2cto.com/database/201804/736027.html

  9. Scrapy入门到放弃04:下载器中间件,让爬虫更完美

    前言 MiddleWare,顾名思义,中间件.主要处理请求(例如添加代理IP.添加请求头等)和处理响应 本篇文章主要讲述下载器中间件的概念,以及如何使用中间件和自定义中间件. MiddleWare分类 ...

  10. SQL语句(三)分组函数和分组查询

    目录 一.分组函数 特点 1. 各函数的简单使用 2. 搭配distinct的使用 3. COUNT 统计行数 4. 和分组函数一同查询的字段要求是group by后的字段 二.分组查询 1. 简单应 ...