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;
}
}

参考文档

  1. https://msdn.microsoft.com/library/9k7k7cf0%28v=vs.110%29.aspx
  2. http://www.cnblogs.com/kingcat/archive/2012/07/11/2585943.html
  3. http://www.cnblogs.com/CareySon/archive/2009/12/16/1625469.html

C#关键字:yield的更多相关文章

  1. Python关键字yield的解释(stackoverflow)

    3.1. 提问者的问题 Python关键字yield的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, dista ...

  2. python 关键字yield解析

    python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...

  3. python 关键字yield

    问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, distance, m ...

  4. Python关键字yield详解以及Iterable 和Iterator区别

    迭代器(Iterator) 为了理解yield是什么,首先要明白生成器(generator)是什么,在讲生成器之前先说说迭代器(iterator),当创建一个列表(list)时,你可以逐个的读取每一项 ...

  5. Python关键字yield的解释

    yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器. >>> def createGenerator() : ... mylist = range(3) . ...

  6. 记录下一个自己不常用的关键字-yield

    yield 这个关键字 一直很少用,也不知道具体用途.按照习惯就查询了下MSDN. 意思大致是这样的:在迭代器块中用于向枚举数对象提供值或发出迭代结束信号 表现形式:1. yield return & ...

  7. python中的关键字yield有什么作用?

    保存当前运行状态,然后暂停执行,即将函数挂起.yield关键字后面表达式的值作为返回值返回.当使用next(),send()函数从断点处继续执行.

  8. python关键字--yield

    彻底理解Python中的yield

  9. 深入理解python中的yield关键字

    想必大家都看过这样的代码: 上面的这段代码会计算0-9的平方并打印出来. 那么问题来了,这段代码和我们要说的东西有什么区别呢? 这里的关键字,yield,我在前面的文章里已经发过了.那么yield是什 ...

  10. Python:笔记(7)——yield关键字

    Python:笔记(7)——yield关键字 yield与生成器 所谓生成器是一个函数,它可以生成一个值的序列,以便在迭代中使用.函数使用yield关键字可以定义生成器对象. 一个例子 我们调用该函数 ...

随机推荐

  1. 数据库小记:根据指定名称查询数据库表名及根据指定名称查询数据库所有表中的字段名称(支持mysql/postgre)

    意:本篇文章仅适用于mysql和postgre这两种数据库 1.查询数据库中所有表名及对应表的详细信息 select * from INFORMATION_SCHEMA.tables 2.根据指定名称 ...

  2. BZOJ1878:[SDOI2009]HH的项链

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  3. Scala学习——类,继承,接口(中)

    基本类的使用:(初) package com.dtspark.scala.basics /** * trait是一个接口 * 接口的第一次继承用extends,多继承时用with * 多继承时,如果这 ...

  4. jsonp实现数据跨域请求

    1.我们知道,哪怕跨域js文件中的代码(当然指符合web脚本安全策略的),web页面也是可以无条件执行的. 远程服务器remoteserver.com根目录下有个remote.js文件代码如下: al ...

  5. msfvenom 摄像头

    4.13 莫名其妙的心情不好 又回到了那个不想打游戏不想聊天不想说话的日子. 不用想.vm——>kali 很早以前看过用msfvenom生成木马的文章.然后……然后我的浏览器就崩溃了.Firef ...

  6. WCF IIS部署

    创建WCFHost应用程序 Iservice.cs using System; using System.Collections.Generic; using System.Linq; using S ...

  7. Spring入门第十课

    Spring表达式语言:SpEL Spring表达式语言(简称SpEL)是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都 ...

  8. eval解析字符串问题

    eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. 复制代码 var str = '{"name&quo ...

  9. CodeForces - 633B A Trivial Problem 数论-阶乘后缀0

    A Trivial Problem Mr. Santa asks all the great programmers of the world to solve a trivial problem. ...

  10. Keras输出每一层网络大小

    示例代码: model = Model(inputs=self.inpt, outputs=self.net) model.compile(loss='categorical_crossentropy ...