Enumerator 迭代器,它是一个作用于一系列值的只读的只能向前的游标。enumerator对象需要实现下列接口中的一个:

  • System.Collections.IEnumerator

  • System.Collections.Generic.IEnumerator<T>

foreach语句会迭代一个Enumerable对象,enumerable对象是一个序列的逻辑表述。它本身不是游标,但是它产生游标。如果一个对象是enumerable对象,那么需要满足下列条件的一个:

  • 实现了IEnumerable和IEnumerable<T>接口

  • 有一个GetEnumerator方法,它返回一个enumerator 迭代器。

下面看两个迭代的例子。第一个是相对高级的方式,使用foreach:

 foreach (char c in "Hello World"){Console.WriteLine(c);}

  

而相对低级的方式,就是不使用foreach:

 using (var enumerator = "Hello World".GetEnumerator()){while (enumerator.MoveNext()){var element=enumerator.Current;Console.WriteLine(element);}}

  

注意:如果enumerator实现了IDisposable接口,那么foreach语句也会像using一样,在结束的时候隐式的dispose掉enumerator 对象。

转载于:https://www.cnblogs.com/jhxk/articles/9697738.html

真会C#? -- Enumerator, Enumerable相关推荐

  1. .NET程序的性能要领和优化建议

    前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...

  2. .NET程序性能的基本要领

    .NET 平台开发应用程序具有极高的生产力..NET 平台上强大安全的编程语言以及丰富的类库,使得开发应用变得卓有成效.但是能力越大责任越大.我们应该使用.NET框架的强大能力,但同时如果我们需要处理 ...

  3. C# 9 新特性 —— 增强的 foreach

    C# 9 新特性 -- 增强的 foreach Intro 在 C# 9 中增强了 foreach 的使用,使得一切对象都有 foreach 的可能 我们来看一段代码,这里我们试图遍历一个 int 类 ...

  4. 使用AsyncEnumerator简化异步操作

    上一次提到了如何跨线程访问GUI.而这个需求往往是异步操作导致的.今天我们就来看看Jeffrey Richter写的AsyncEnumerator如何帮助我们处理异步问题. 先来看看最简单的一段异步下 ...

  5. koa源码分析-generator和yield分析

    Generator和yield 分析 项目中使用了koa,最近在学习koa的源码,先把这些东西都写下来,免得以后忘记了. koa源码学习前先注意下面这三个概念 generator function ( ...

  6. calcite连接mysql_如何使用Calcite实现一个简单的数据库

    说道Calcite你可能有些陌生, 但提及Hive.Kylin.Apache Drill.Flink等一定不会陌生,这些都是在我们日常工作中经常用到的,如上这些都是基于Calcite实现查询引擎,还有 ...

  7. 花瓣网李忠:ReactiveCocoa是Cocoa的未来

    ReactiveCocoa(其简称为RAC)是由Github工程师们开发的一个应用于iOS和OS X开发的函数响应式编程新框架.ReactiveCocoa为开发者带来了函数式编程和响应式编程的思想,被 ...

  8. C# 学习笔记:迭代器

    C#中,如果实现遍历一个数组,除了for循环,还可以是foreach循环.在foreach循环中,我们只需要创建一个同类型的值,来表示我们遍历后的值就可以了.但是实际上,只有实现了IEnumerabl ...

  9. C# 9 对IEnumerator类似物应用foreach

    文章目录 前言 原理 例子 引用 前言 前段时间有过foreach (var item in enunerator)的脑洞,但百度半天没有结果.去bing找竟然在第一页第三个就是: Using for ...

最新文章

  1. FPGA之道(17)FPGA设计的时序分析
  2. Python学习笔记之函数式编程
  3. Maven plugins和pluginManagement的区别概述
  4. TextArea里Placeholder换行问题
  5. Linux Shell常用命令学习(1)
  6. 系统学习NLP(八)--中文分词整理
  7. 5.2 Zend_Log_Formatters
  8. 学习日记——W25Q64 FLASH—QSPI
  9. 进行海外媒体发稿的稿件撰写技巧和方法
  10. David P.Williams论文系列 SAS图像分辨率与目标检测性能的关系
  11. php可以发短信的代码,php实现短信发送代码
  12. Mysql输错命令后如何退出
  13. 小型初创公司Trisymbiotic IP(R)宣布,其美国专利10,020,436的设施效率超越美国和中国最快的超级计算机
  14. c语言matlab混编max函数,Matlab与C++混编 – engin.h
  15. 2020-7-3中兴IC开发设计师 专业面,
  16. 【日常学习】XML文件约束,Tomcat服务器和HTTP协议
  17. 软考复习-软件工程05-软件项目估算进度管理
  18. 数据结构(串、数组和广义表)
  19. android安卓导航栏高度是多少,Android--状态栏高度,导航栏高度,Window高度,DecorView高度,heightPixels...
  20. GitHub下载加速-浏览器插件篇(一)

热门文章

  1. H5移动端调试神器-eruda.js
  2. mysql之密码复杂度设置
  3. 安徽文达学院计算机协会,附件徽商职业学院第四届社团活动月策划书.doc
  4. 对话胡浩:京东智慧供应链如何支撑高峰618
  5. Android蓝牙打印二维码打印外卖单打印
  6. SAPUI5入门到精通4--开发者工具的使用(Eclipse,Web IDE, EditPlus3,webstorm....... )
  7. 伤心SSL暑期培训 Day 9
  8. 如何运行Python文件?
  9. 最有文采有学生评语下载大全
  10. 【空气质量数据分析专题七】污染物浓度月变化分析