yield关键字 C#
前段时间,在一次面试中被问到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类型(一种迭代器接口类型)
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#相关推荐
- 反编译使用yield关键字的方法
我认为这是一个真命题:"没有用.NET Reflector反编译并阅读过代码的程序员不是专业的.NET程序员"..NET Reflector强大的地方就在于可以把IL代码反编译成可 ...
- c# yield关键字原理
https://www.cnblogs.com/blueberryzzz/p/8678700.html c# yield关键字原理详解 1.yield实现的功能 yield return: 先看下面的 ...
- python网络爬虫之yield关键字的使用!
yield关键字,33关键字之一! yield<- ->生成器 源源不断生成数据的生成器! 实例: 我的尝试: 为何用生成器: 优点如下: 更加节省存储空间 响应更加迅速 使用更加灵活 对 ...
- C#中使用的yield关键字是什么?
在" 如何仅显示IList <>的片段"问题中,答案之一具有以下代码片段: IEnumerable<object> FilteredList() {fore ...
- “ yield”关键字有什么作用?
Python中yield关键字的用途是什么? 它有什么作用? 例如,我试图理解这段代码1 : def _get_child_candidates(self, distance, min_dist, m ...
- python function if yield_Python中的yield关键字
Python中的yield关键字 这是stackoverflow上一个关于yield关键字的问题以及它被推荐次数最高的一个答案 问题: Python中的yield关键字是什么?它是用来做什么的? 例如 ...
- python生成器yield原理_生成器yield关键字详解
鉴于yield关键字的原理大家理解的都不是很深刻,今天我们主要就这一课题进行探讨. 生成器可以用什么方式得到? 方法一: 利用推导式的方式得到生成器# 列表推导式 list1 = [i for i i ...
- 从range和xrange的性能对比到yield关键字(中)
2019独角兽企业重金招聘Python工程师标准>>> 上节提出了range和xrange的效率问题,这节我们来探究其中的原因 yield的使用 我们看下面的程序: #coding: ...
- Python的yield关键字
http://blog.csdn.net/tossgoer/archive/2010/08/18/5822303.aspx 忽然得知Python有个叫yield的关键字,好奇之下去查了查,花了点时间基 ...
- python里的关键字有哪些_Python中的yield关键字做了什么?
Python中的yield关键字做了什么 要理解yield做了什么,就必须明白生成器(generators)为何物,而在明白生成器之前还要知道迭代器(iterables). 1.迭代器 当我们创建一个 ...
最新文章
- bzoj 2648: SJY摆棋子2716: [Violet 3]天使玩偶 --kdtree
- php 转通达信数据格式,通达信数据格式
- flash如何同时访问本地文件系统和网络文件
- 用国家简写查找对应的国家名称和所在 洲
- Android 自定义Drawable实现圆角矩形图片和圆形图片
- 移植 usb 蓝牙适配器到 arm 板
- c语言建立小根堆的算法,小根堆(Heap)的详细实现
- ThnBoV1.3.0一款针对WordPress开发的缩略图美化插件
- Ubuntu 20.04 electron无法上网参考解决方法
- 网络管理软件都有哪些,目前好用的网络管理软件
- 【离线语音专题①】安信可最新离线语音模组VC系列出厂固件使用教程——SDK开源?
- js是用什么语言编写实现的
- 2021 广工 Anyview 数据结构第 5 章
- 华为出品,必属精品!华为资深专家十年‘成神之作’网络协议宝典
- 美国或下周封杀委内瑞拉石油币,法国AMF:不禁止无证ICO,有证ICO须特定担保 | 区块链日报
- 怎样回答技术面试题?
- Word在线翻译操作的方法
- 2021 owasp top10
- 数据库设计的六个基本步骤
- C语言-循环打印星号图形再镂空
热门文章
- PHPExcel基本使用
- Pycharm安装完出现interpreter field is empty
- github库fork后,将更新提交到源库
- 泰山OFFICE正式在UOS应用商店上架
- error trying to exec 'cc1plus': execvp: 没有那个文件或目录
- LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
- 全屏窗口指令_在iOS 14系统中,快捷指令原来有多达11种运行方式(上篇)
- oracle复制数据库文件,Oracle备份与恢复系列(四)复制数据库 使用原有的控制文件...
- mp3 播放自动 html5,HTML5打造简易播放器:Chrome运行.mp3
- 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点