yield 语法备忘录
yield 语法备忘录
yield 语法备忘录
语法 .net
yield 读作:“一有得” 英式发音 皮一下~
yield 关键字向编译器指示它所在的方法是迭代器块。 编译器生成一个类来实现迭代器块中表示的行为。
它可以搭配两个关键字来使用一个是return 另一是 break
在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。 这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。
private static IEnumerable<int> yieldTest()
{
var testnum = new List<int>(){1,2,3,4,5,6,7,8,9,0}; foreach (int test in testnum)
{
yield return test;
} }
而我们一般如果不用yield返回的代码则需要new一个对象然后add再返回IEnumerable像这样
private static IEnumerable<int> yieldTest()
{
var testnum = new List<int>(){1,2,3,4,5,6,7,8,9,0}; List rtnum = new List<int>(); foreach (int test in testnum)
{
rtnum.Add(test);
}
return rtnum;
}
在 yield break 语句中,控制权将无条件地返回给迭代器的调用方,也就是直接退出返回结果。
private static IEnumerable<int> yieldTest()
{
var testnum = new List<int>(){1,2,3,4,5,6,7,8,9,0}; for (int i = 0; i < testnum.Count; i++)
{
if(i == 5) {yield break;} yield return testnum[i];
} Console.WriteLine("你用了yield break 则这条输出你是看不到的"); }
如果你用的break则只是跳出当前循环,会继续执行完整个函数。
private static IEnumerable<int> yieldTest()
{
var testnum = new List<int>(){1,2,3,4,5,6,7,8,9,0}; for (int i = 0; i < testnum.Count; i++)
{
if(i == 5) { break;} yield return testnum[i];
} Console.WriteLine("你用了break 则这条输出你是可以看到的"); }
注意不要将break与continue搞混 break是跳出整循环 continue则是跳过当前循环。
private static IEnumerable<int> yieldTest()
{
var testnum = new List<int>(){1,2,3,4,5,6,7,8,9,0}; for (int i = 0; i < testnum.Count; i++)
{
if(i == 5) { continue;} yield return testnum[i];
} }
备注yield 语句只能出现在 iterator 块中,这种块可作为方法、运算符或访问器的主体实现。 这类方法、运算符或访问器的体受以下约束的控制:
- 不允许不安全块。
- 方法、运算符或访问器的参数不能是 ref 或 out。
- yield return 语句不能放在 try-catch 块中的任何位置。 该语句可放在后跟 finally 块的 try 块中。
- yield break 语句可放在 try 块或 catch 块中,但不能放在 finally 块中。
- yield 语句不能出现在匿名方法中。
- 当和 expression 一起使用时,yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中
yield 语法备忘录的更多相关文章
- javascript基础语法备忘录-变量和数据类型
//javascript基础语法备忘录-变量和数据类型 // 定义变量使用var关键字 后面跟变量名,不要使用eval 和arguments为变量名 var message = "hi&qu ...
- [JavaScript]ECMA-6 yield语法
概述 yield关键字用于并且仅限于生成器函数(generator)内部,作用是暂停(并返回)/重启(可选修改该栈环境变量)该函数栈环境. 一般语法 调用生成器函数时返回一个可迭代对象,当调用该对象的 ...
- Python之yield语法
生成器与yield 函数使用yield关键字可以定义生成器对象.生成器是一个函数.它生成一个值的序列,以便在迭代中使用,例如: def countdown(n): print('倒计时:%s' % n ...
- 多角度让你彻底明白yield语法糖的用法和原理及在C#函数式编程中的作用
如果大家读过dapper源码,你会发现这内部有很多方法都用到了yield关键词,那yield到底是用来干嘛的,能不能拿掉,拿掉与不拿掉有多大的差别,首先上一段dapper中精简后的Query方法,先让 ...
- lua语法备忘录
1.三元表达式 a?b:c => a and b or c 2.循环数组 local keys = args.kvs:get_keys() local arr = xstring.split(k ...
- python yield from 语法
python yield from 语法 yield语法比较简单, 教程也很多 , yield from的中文讲解很少 , python官网是这样解释的 PEP 380 adds the yield ...
- Python并发编程之深入理解yield from语法(八)
大家好,并发编程 进入第八篇. 直到上一篇,我们终于迎来了Python并发编程中,最高级.最重要.当然也是最难的知识点--协程. 当你看到这一篇的时候,请确保你对生成器的知识,有一定的了解.当然不了解 ...
- 深入理解yield from语法
本文目录 为什么要使用协程 yield from的用法详解 为什么要使用yield from . 为什么要使用协程# 在上一篇中,我们从生成器的基本认识与使用,成功过渡到了协程. 但一定有许多人,只知 ...
- Python 生成器与迭代器 yield 案例分析
前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...
随机推荐
- Proxmox如何进入单人维护模式(重置root密码)
官网连接:https://pve.proxmox.com/wiki/Root_Password_Reset Root Password Reset Contents [hide] 1Reset ...
- JS Style Guide_1
当你在回调函数里要使用函数表达式时,尽量使用箭头函数,比如数组中的 Map.filter.reduce等的回调函数中 [1,2,3].map((x) => { let y = x + 1; re ...
- Android ListView 常用技巧总结
本文对 ListView 中的一些常用技巧做一个总结.附:虽然现在 RecyclerView 已逐渐取代 ListView,但实际情况是大部分项目中还在使用 ListView.当然,后续我会在我的博客 ...
- RxJS学习笔记之Subject
本文为原创文章,转载请标明出处 目录 Subject BehaviorSubject ReplaySubject AsyncSubject 1. Subject 总的来说,Subject 既是能够将值 ...
- IDEA如何添加库lib(java)
1.点击file 2.点击 3.点击 4.点击右面+号 5.找到你的类库添加即可
- python 同步与异步的性能区别及实例
同步与异步的性能区别 1. #coding:utf-8 import gevent def task(pid): """ Some non-deterministic ...
- spring基于@Value绑定属Bean性失
用spring注解@Value绑定属性失败 环境: eclipse Version: Luna Release (4.4.0) spring 4.0 Junit4 其他依赖包 描述: JsrDAO类, ...
- MatterTrack Route Of Network Traffic :: Matter
Python 1.1 基础 while语句 字符串边缘填充 列出文件夹中的指定文件类型 All Combinations For A List Of Objects Apply Operations ...
- mysqldump: Got error: 1449: The user specified as a definer ('user'@'%') does not exist when using LOCK TABLES
报错:一个库用mysqldump -u -p --opt --force -e --max_allowed_packet= --net_buffer_length= --databases备份时报错如 ...
- 查漏补缺:Vector中去重
对于STL去重,可以使用<algorithm>中提供的unique()函数. unique()函数用于去除相邻元素中的重复元素(所以去重前需要对vector进行排序),只留下一个.返回去重 ...