博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yield 语法备忘录
阅读量:4589 次
发布时间:2019-06-09

本文共 2170 字,大约阅读时间需要 7 分钟。

yield 语法备忘录

 
 

yield 语法备忘录

语法 .net


yield 读作:“一有得” 英式发音 皮一下~

yield 关键字向编译器指示它所在的方法是迭代器块。 编译器生成一个类来实现迭代器块中表示的行为。

  • 它可以搭配两个关键字来使用一个是return 另一是 break

  • 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。 这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。

    private static IEnumerable
    yieldTest() { var testnum = new List
    (){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
    yieldTest() { var testnum = new List
    (){1,2,3,4,5,6,7,8,9,0}; List rtnum = new List
    (); foreach (int test in testnum) { rtnum.Add(test); } return rtnum; }
  • 在 yield break 语句中,控制权将无条件地返回给迭代器的调用方,也就是直接退出返回结果。

    private static IEnumerable
    yieldTest() { var testnum = new List
    (){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
    yieldTest() { var testnum = new List
    (){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
    yieldTest() { var testnum = new List
    (){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 块中

转载于:https://www.cnblogs.com/dongzhaosheng/p/10269747.html

你可能感兴趣的文章
Spring归纳
查看>>
MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
查看>>
24小时学通Linux内核之向内核添加代码
查看>>
python 函数
查看>>
Solr4.0 如何配置使用UUID自动生成id值
查看>>
Marketing™Series用户手册(Marketing™Series Manual)
查看>>
Java动态代理
查看>>
二维码开源库zbar、zxing使用心得
查看>>
框架设计读书笔记--扩展点设计--组合法
查看>>
Web开发小贴士 -- 全面了解Cookie
查看>>
收藏Javascript中常用的55个经典技巧
查看>>
Arm-linux-gcc-4.3.2安装步骤
查看>>
Java多线程与并发编程学习
查看>>
Support Vector Machine
查看>>
牛客-2018多校算法第五场C-KMP
查看>>
Linux查看文件内容
查看>>
[转]社会生活中十二大著名法则 1 马太效应 2 手表定理 3 不值得定律 4 彼得原理 5 零和游戏原理 6 华盛顿合作规律 7 酒与污水定律 8 水桶定律 9 蘑菇管理 10 奥...
查看>>
浅谈三层与实体
查看>>
cocostudio——js 3 final控件事件
查看>>
Flex 学习笔记 datatip的背景颜色
查看>>