前段时间,在一次面试中被问到yield关键字,当时懵了,回来查了一下,与诸君分享。

yield 关键字向编译器指示它所在的方法是迭代器块。 编译器生成一个类来实现迭代器块中表示的行为。 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。 这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。 yield 关键字也可与 break 结合使用,表示迭代结束。

yield 语句两种形式:

yield return <expression>;

yield break;

在 yield return 语句中,将计算 expression 并将结果以值的形式返回给枚举器对象;expression 必须可以隐式转换为 yield 类型的迭代器。

在 yield break 语句中,控制权将无条件地返回给迭代器的调用方,该调用方为枚举器对象的 IEnumerator.MoveNext 方法
(或其对应的泛型 System.Collections.Generic.IEnumerable<T>)或 Dispose 方法。

yield 语句只能出现在 iterator(迭代器) 块中,这种块可作为方法、运算符或访问器的主体实现。 这类方法、运算符或访问器的体受以下约束的控制:

  • 不允许不安全块。

  • 方法、运算符或访问器的参数不能是 ref 或 out。

  • yield return 语句不能放在 try-catch 块中的任何位置。 该语句可放在后跟 finally 块的 try 块中。

  • yield break 语句可放在 try 块或 catch 块中,但不能放在 finally 块中。

yield 语句不能出现在匿名方法中。

当和 expression 一起使用时,yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中。

下面的示例使用了yield,并返回IEnumerable类型(一种迭代器接口类型)

 1  public class NumberList
 2         {
 3             // Create an array of integers.
 4              public static int[] ints = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 };
 5 
 6             // Define a property that returns only the even numbers.
 7              public static IEnumerable<int> GetEven()
 8             {
 9                 // Use yield to return the even numbers in the list.
10                  foreach (int i in ints)
11                     if (i % 2 == 0)
12                         yield return i;
13             }
14 
15          static void Main(string[] args)
16         {
17 
18             // Display the even numbers.
19              Console.WriteLine("Even numbers");
20             foreach (int i in NumberList.GetEven())
21                 Console.WriteLine(i);
22         }
23 
24         }

转载于:https://www.cnblogs.com/dreamzyl/archive/2011/04/06/2006427.html

yield关键字 C#相关推荐

  1. 反编译使用yield关键字的方法

    我认为这是一个真命题:"没有用.NET Reflector反编译并阅读过代码的程序员不是专业的.NET程序员"..NET Reflector强大的地方就在于可以把IL代码反编译成可 ...

  2. c# yield关键字原理

    https://www.cnblogs.com/blueberryzzz/p/8678700.html c# yield关键字原理详解 1.yield实现的功能 yield return: 先看下面的 ...

  3. python网络爬虫之yield关键字的使用!

    yield关键字,33关键字之一! yield<- ->生成器 源源不断生成数据的生成器! 实例: 我的尝试: 为何用生成器: 优点如下: 更加节省存储空间 响应更加迅速 使用更加灵活 对 ...

  4. C#中使用的yield关键字是什么?

    在" 如何仅显示IList <>的片段"问题中,答案之一具有以下代码片段: IEnumerable<object> FilteredList() {fore ...

  5. “ yield”关键字有什么作用?

    Python中yield关键字的用途是什么? 它有什么作用? 例如,我试图理解这段代码1 : def _get_child_candidates(self, distance, min_dist, m ...

  6. python function if yield_Python中的yield关键字

    Python中的yield关键字 这是stackoverflow上一个关于yield关键字的问题以及它被推荐次数最高的一个答案 问题: Python中的yield关键字是什么?它是用来做什么的? 例如 ...

  7. python生成器yield原理_生成器yield关键字详解

    鉴于yield关键字的原理大家理解的都不是很深刻,今天我们主要就这一课题进行探讨. 生成器可以用什么方式得到? 方法一: 利用推导式的方式得到生成器# 列表推导式 list1 = [i for i i ...

  8. 从range和xrange的性能对比到yield关键字(中)

    2019独角兽企业重金招聘Python工程师标准>>> 上节提出了range和xrange的效率问题,这节我们来探究其中的原因 yield的使用 我们看下面的程序: #coding: ...

  9. Python的yield关键字

    http://blog.csdn.net/tossgoer/archive/2010/08/18/5822303.aspx 忽然得知Python有个叫yield的关键字,好奇之下去查了查,花了点时间基 ...

  10. python里的关键字有哪些_Python中的yield关键字做了什么?

    Python中的yield关键字做了什么 要理解yield做了什么,就必须明白生成器(generators)为何物,而在明白生成器之前还要知道迭代器(iterables). 1.迭代器 当我们创建一个 ...

最新文章

  1. bzoj 2648: SJY摆棋子2716: [Violet 3]天使玩偶 --kdtree
  2. php 转通达信数据格式,通达信数据格式
  3. flash如何同时访问本地文件系统和网络文件
  4. 用国家简写查找对应的国家名称和所在 洲
  5. Android 自定义Drawable实现圆角矩形图片和圆形图片
  6. 移植 usb 蓝牙适配器到 arm 板
  7. c语言建立小根堆的算法,小根堆(Heap)的详细实现
  8. ThnBoV1.3.0一款针对WordPress开发的缩略图美化插件
  9. Ubuntu 20.04 electron无法上网参考解决方法
  10. 网络管理软件都有哪些,目前好用的网络管理软件
  11. 【离线语音专题①】安信可最新离线语音模组VC系列出厂固件使用教程——SDK开源?
  12. js是用什么语言编写实现的
  13. 2021 广工 Anyview 数据结构第 5 章
  14. 华为出品,必属精品!华为资深专家十年‘成神之作’网络协议宝典
  15. 美国或下周封杀委内瑞拉石油币,法国AMF:不禁止无证ICO,有证ICO须特定担保 | 区块链日报
  16. 怎样回答技术面试题?
  17. Word在线翻译操作的方法
  18. 2021 owasp top10
  19. 数据库设计的六个基本步骤
  20. C语言-循环打印星号图形再镂空

热门文章

  1. PHPExcel基本使用
  2. Pycharm安装完出现interpreter field is empty
  3. github库fork后,将更新提交到源库
  4. 泰山OFFICE正式在UOS应用商店上架
  5. error trying to exec 'cc1plus': execvp: 没有那个文件或目录
  6. LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
  7. 全屏窗口指令_在iOS 14系统中,快捷指令原来有多达11种运行方式(上篇)
  8. oracle复制数据库文件,Oracle备份与恢复系列(四)复制数据库 使用原有的控制文件...
  9. mp3 播放自动 html5,HTML5打造简易播放器:Chrome运行.mp3
  10. 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点