C#关键字:yield
yield是C#为了简化遍历操作实现的语法糖。在语句中使用 yield 关键字,表示在该关键字所在的方法、运算符或 get 访问器是迭代器。有两种形式:
yield return <expression>;
yield break;
这个还是看个实例更清楚:
static void Main(string[] args)
{
foreach (int i in Power(, ))
{
Console.Write("{0} ", i);
}
// Output: 2 4 8 16 32 64 128 256 Console.ReadKey();
} public static System.Collections.IEnumerable Power(int number, int exponent)
{
int result = ;
for (int i = ; i < exponent; i++)
{
result = result * number;
yield return result;
}
}
此处,使用了 yield return 返回每一个元素节点。使用 foreach 语句或 LINQ 查询,则使用迭代器方法。 foreach 循环的每次迭代调用迭代器方法。 当 yield return 语句在迭代器方法时为止,expression 返回,并且,代码的当前位置保留。 当下次调用迭代器函数时执行从该位置重新启动。通过调试,我们可以看到代码的执行顺序大致如下:

这个图中标记的顺序可能有点抽象,不知道大家能不能理解?~~~
除此之外还有 yield break , 其表示结束迭代,跳出循环。不理解,看实例:
static void Main(string[] args)
{
foreach (int i in Power(, ))
{
Console.Write("{0} ", i);
}
// Output: 2 4 8 16 Console.ReadKey();
} public static System.Collections.IEnumerable Power(int number, int exponent)
{
int result = ;
for (int i = ; i < exponent; i++)
{
result = result * number;
if (i == )
yield break;
yield return result;
}
}
参考文档
- https://msdn.microsoft.com/library/9k7k7cf0%28v=vs.110%29.aspx
- http://www.cnblogs.com/kingcat/archive/2012/07/11/2585943.html
- http://www.cnblogs.com/CareySon/archive/2009/12/16/1625469.html
C#关键字:yield的更多相关文章
- Python关键字yield的解释(stackoverflow)
3.1. 提问者的问题 Python关键字yield的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, dista ...
- python 关键字yield解析
python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...
- python 关键字yield
问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, distance, m ...
- Python关键字yield详解以及Iterable 和Iterator区别
迭代器(Iterator) 为了理解yield是什么,首先要明白生成器(generator)是什么,在讲生成器之前先说说迭代器(iterator),当创建一个列表(list)时,你可以逐个的读取每一项 ...
- Python关键字yield的解释
yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器. >>> def createGenerator() : ... mylist = range(3) . ...
- 记录下一个自己不常用的关键字-yield
yield 这个关键字 一直很少用,也不知道具体用途.按照习惯就查询了下MSDN. 意思大致是这样的:在迭代器块中用于向枚举数对象提供值或发出迭代结束信号 表现形式:1. yield return & ...
- python中的关键字yield有什么作用?
保存当前运行状态,然后暂停执行,即将函数挂起.yield关键字后面表达式的值作为返回值返回.当使用next(),send()函数从断点处继续执行.
- python关键字--yield
彻底理解Python中的yield
- 深入理解python中的yield关键字
想必大家都看过这样的代码: 上面的这段代码会计算0-9的平方并打印出来. 那么问题来了,这段代码和我们要说的东西有什么区别呢? 这里的关键字,yield,我在前面的文章里已经发过了.那么yield是什 ...
- Python:笔记(7)——yield关键字
Python:笔记(7)——yield关键字 yield与生成器 所谓生成器是一个函数,它可以生成一个值的序列,以便在迭代中使用.函数使用yield关键字可以定义生成器对象. 一个例子 我们调用该函数 ...
随机推荐
- 洛谷P3372线段树模板1——线段树
题目:https://www.luogu.org/problemnew/show/P3372 线段树模板. 代码如下: #include<iostream> #include<cst ...
- jQuery 防止相同的事件快速重复触发
重复触发就是防止用户重复点击提交数据了,我们一般都是点击之后没反应会再次点击了,这个不但要从用户体验上来做好,还在要js或php程序脚本上做好,让用户知道点击是己提交服务器正在处理,下面我就整理从脚本 ...
- jquery 插件 国外
http://www.jqueryrain.com/demo/jquery-portfolio-gallery-plugin/
- WebService基础入门(转)
一.概念: 1.WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用. 2.我们可以调用互联网上查询天气信息Web服务,然后 ...
- utunbu下的codeblocks配置openGL环境
真想骂娘阿,刚开始用utunbu,什么也不明白,不明白我装都软件都在哪里,不知道就像windows下的系统文件那样的文件在哪里,也不知道如何配置环境变量.就这样稀里糊涂的,还要抓紧时间装openGL, ...
- 【异步编程】Part3:取消异步操作
在.Net和C#中运行异步代码相当简单,因为我们有时候需要取消正在进行的异步操作,通过本文,可以掌握 通过CancellationToken取消任务(包括non-cancellable任务). 早期 ...
- python矩阵相加
举个栗子: # 两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵: # 使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中. import n ...
- vue-cli 3.0安装和使用
零. 前言 公司最近开发项目使用的是vue-cli 3.0版本开发,但是对于vue-cli 3.0版本一直没有研究过如何使用,公司使用配置:pug + ts + stylus + eslint:编辑器 ...
- 【转】oracle的分析函数over
源地址:http://www.cnblogs.com/sumsen/archive/2012/05/30/2525800.html
- Selenium IDE + Firefox
又掉进了同一个坑了,最新firefox版本和selenium ide不兼容,工具栏愣是找不到selenium ide的button,换成firefox5.0就好了 selenium用的版本是2.5. ...