真会C#? -- Enumerator, Enumerable
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相关推荐
- .NET程序的性能要领和优化建议
前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...
- .NET程序性能的基本要领
.NET 平台开发应用程序具有极高的生产力..NET 平台上强大安全的编程语言以及丰富的类库,使得开发应用变得卓有成效.但是能力越大责任越大.我们应该使用.NET框架的强大能力,但同时如果我们需要处理 ...
- C# 9 新特性 —— 增强的 foreach
C# 9 新特性 -- 增强的 foreach Intro 在 C# 9 中增强了 foreach 的使用,使得一切对象都有 foreach 的可能 我们来看一段代码,这里我们试图遍历一个 int 类 ...
- 使用AsyncEnumerator简化异步操作
上一次提到了如何跨线程访问GUI.而这个需求往往是异步操作导致的.今天我们就来看看Jeffrey Richter写的AsyncEnumerator如何帮助我们处理异步问题. 先来看看最简单的一段异步下 ...
- koa源码分析-generator和yield分析
Generator和yield 分析 项目中使用了koa,最近在学习koa的源码,先把这些东西都写下来,免得以后忘记了. koa源码学习前先注意下面这三个概念 generator function ( ...
- calcite连接mysql_如何使用Calcite实现一个简单的数据库
说道Calcite你可能有些陌生, 但提及Hive.Kylin.Apache Drill.Flink等一定不会陌生,这些都是在我们日常工作中经常用到的,如上这些都是基于Calcite实现查询引擎,还有 ...
- 花瓣网李忠:ReactiveCocoa是Cocoa的未来
ReactiveCocoa(其简称为RAC)是由Github工程师们开发的一个应用于iOS和OS X开发的函数响应式编程新框架.ReactiveCocoa为开发者带来了函数式编程和响应式编程的思想,被 ...
- C# 学习笔记:迭代器
C#中,如果实现遍历一个数组,除了for循环,还可以是foreach循环.在foreach循环中,我们只需要创建一个同类型的值,来表示我们遍历后的值就可以了.但是实际上,只有实现了IEnumerabl ...
- C# 9 对IEnumerator类似物应用foreach
文章目录 前言 原理 例子 引用 前言 前段时间有过foreach (var item in enunerator)的脑洞,但百度半天没有结果.去bing找竟然在第一页第三个就是: Using for ...
最新文章
- FPGA之道(17)FPGA设计的时序分析
- Python学习笔记之函数式编程
- Maven plugins和pluginManagement的区别概述
- TextArea里Placeholder换行问题
- Linux Shell常用命令学习(1)
- 系统学习NLP(八)--中文分词整理
- 5.2 Zend_Log_Formatters
- 学习日记——W25Q64 FLASH—QSPI
- 进行海外媒体发稿的稿件撰写技巧和方法
- David P.Williams论文系列 SAS图像分辨率与目标检测性能的关系
- php可以发短信的代码,php实现短信发送代码
- Mysql输错命令后如何退出
- 小型初创公司Trisymbiotic IP(R)宣布,其美国专利10,020,436的设施效率超越美国和中国最快的超级计算机
- c语言matlab混编max函数,Matlab与C++混编 – engin.h
- 2020-7-3中兴IC开发设计师 专业面,
- 【日常学习】XML文件约束,Tomcat服务器和HTTP协议
- 软考复习-软件工程05-软件项目估算进度管理
- 数据结构(串、数组和广义表)
- android安卓导航栏高度是多少,Android--状态栏高度,导航栏高度,Window高度,DecorView高度,heightPixels...
- GitHub下载加速-浏览器插件篇(一)
热门文章
- H5移动端调试神器-eruda.js
- mysql之密码复杂度设置
- 安徽文达学院计算机协会,附件徽商职业学院第四届社团活动月策划书.doc
- 对话胡浩:京东智慧供应链如何支撑高峰618
- Android蓝牙打印二维码打印外卖单打印
- SAPUI5入门到精通4--开发者工具的使用(Eclipse,Web IDE, EditPlus3,webstorm....... )
- 伤心SSL暑期培训 Day 9
- 如何运行Python文件?
- 最有文采有学生评语下载大全
- 【空气质量数据分析专题七】污染物浓度月变化分析