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 语法备忘录的更多相关文章

  1. javascript基础语法备忘录-变量和数据类型

    //javascript基础语法备忘录-变量和数据类型 // 定义变量使用var关键字 后面跟变量名,不要使用eval 和arguments为变量名 var message = "hi&qu ...

  2. [JavaScript]ECMA-6 yield语法

    概述 yield关键字用于并且仅限于生成器函数(generator)内部,作用是暂停(并返回)/重启(可选修改该栈环境变量)该函数栈环境. 一般语法 调用生成器函数时返回一个可迭代对象,当调用该对象的 ...

  3. Python之yield语法

    生成器与yield 函数使用yield关键字可以定义生成器对象.生成器是一个函数.它生成一个值的序列,以便在迭代中使用,例如: def countdown(n): print('倒计时:%s' % n ...

  4. 多角度让你彻底明白yield语法糖的用法和原理及在C#函数式编程中的作用

    如果大家读过dapper源码,你会发现这内部有很多方法都用到了yield关键词,那yield到底是用来干嘛的,能不能拿掉,拿掉与不拿掉有多大的差别,首先上一段dapper中精简后的Query方法,先让 ...

  5. lua语法备忘录

    1.三元表达式 a?b:c => a and b or c 2.循环数组 local keys = args.kvs:get_keys() local arr = xstring.split(k ...

  6. python yield from 语法

    python yield from 语法 yield语法比较简单, 教程也很多 , yield from的中文讲解很少 , python官网是这样解释的 PEP 380 adds the yield ...

  7. Python并发编程之深入理解yield from语法(八)

    大家好,并发编程 进入第八篇. 直到上一篇,我们终于迎来了Python并发编程中,最高级.最重要.当然也是最难的知识点--协程. 当你看到这一篇的时候,请确保你对生成器的知识,有一定的了解.当然不了解 ...

  8. 深入理解yield from语法

    本文目录 为什么要使用协程 yield from的用法详解 为什么要使用yield from . 为什么要使用协程# 在上一篇中,我们从生成器的基本认识与使用,成功过渡到了协程. 但一定有许多人,只知 ...

  9. Python 生成器与迭代器 yield 案例分析

    前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...

随机推荐

  1. 使用Hangfire MVC 做排程

    Greg Yang Developer Taipei, Taiwan 108 POSTS 35 TAGS 所使用的是 Hangfire 強大排程器有 UI介面可以使用. 首先安裝PM> Inst ...

  2. mac上svn: This client is too old to work with working copy 问题的解决

    安装svn时,提示This client is too old to work with working copy........原因:svn的版本过旧,安装1.8的svn即可.下面简要说明一些步骤: ...

  3. python基础局部变量、全局变量

    局部变量的作用域只作用与当前函数块(或代码块)中,对函数块(或代码块)之外的重名变量,没有任何影响. 在函数块(或代码块)中,局部变量可用通过global关键字声明变量来改变在函数块(或代码块)之外对 ...

  4. 任务框架--Quartz 配置文件

    配置文件 Quartz 有一个叫做quartz.properties的配置文件,它允许你修改框架运行时环境.缺省是使用 Quartz.jar 里面的quartz.properties 文件.你应该创建 ...

  5. 如何安装与配置MySQL

    关键词:MySQL,安装,配置 这一节,我们讨论一下MySQL的安装配置与卸载 下载 网址:https://dev.mysql.com/downloads/mysql/ 选择社区版,找到对应的电脑,开 ...

  6. LSTM 句子相似度分析

    使用句子中出现单词的Vector加权平均进行文本相似度分析虽然简单,但也有比较明显的缺点:没有考虑词序且词向量区别不明确.如下面两个句子: "北京的首都是中国"与"中国的 ...

  7. Maven使用和配置

    Maven使用和配置 一.maven安装和概念 maven安装 maven编译(compile) 执行测试用例(test) maven打包(package) maven依赖管理 1.maven安装 官 ...

  8. springmvc两种配置方法

    基于配置文件xml方式, 配置springmvc步骤: 1.在pom文件中引入jar包: <!--导入springmvc的jar包--> <dependency> <gr ...

  9. java基础知识点补充---二维数组

    #java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...

  10. Python开发(三):字符编码,文件操作,函数

    一:三级菜单 If len(choice) == continue # 判断输入的是否为空,为空就跳出这次循环进行下次循环, exit(“bye”) :退出程序显示,bye 二:编码 最早的编码是as ...