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 块中
分类:
C#基础学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗