yield return 是 C# 中实现自定义迭代器的简洁高效方式,编译器将其转为状态机支持延迟执行;方法返回 IEnumerable 或 IEnumerator,不可含 return 语句(除 yield break)、ref/out 参数或 try-catch 包裹 yield;适用于大数据、IO 流及无限序列。
在C#中,yield return 是实现自定义迭代器最简洁、高效的方式,它让方法能逐个返回元素,而无需手动实现 IEnumerable 和 IEnumerator 接口。
标记为 yield return 的方法必须返回 IEnumerable 或 IEnumerator,且不能有 return 语句(除 yield break 外),也不能有 ref/out 参数或 try-catch 包裹 yield 语句(但可在 try 外或 finally 中使用)。
编译器会将该方法自动转换为一个状态机类,支持延迟执行和按需生成数据。
MoveNext() 时,代码从上一次暂停处继续执行,直到下一个 yield return 或方法结束yield return,比如条件判断、循环嵌套以下方法返回前 n 个斐波那契数:
public static IEnumerableFibonacci(int n) { long a = 0, b = 1; for (int i = 0; i < n; i++) { yield return a; long temp = a + b; a = b; b = temp; } }
调用方式:foreach (var x in Fibonacci(10)) Console.WriteLine(x); —— 每次只算一个数,不预先分配数组。
比如遍历二维数组并跳过空值:
public static IEnumerableFlattenAndFilter(string[,] matrix) { if (matrix == null) yield break; int rows = matrix.GetLength(0); int cols = matrix.GetLength(1); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { string val = matrix[i, j]; if (!string.IsNullOrEmpty(val)) yield return val; } }}
也可用
yield break提前退出整个迭代,相当于“return”。注意点和常见误区
yield return方法不是普通方法调用——它不立即执行,而是返回一个可枚举对象;只有在foreach、ToList()、First()等触发遍历时才开始运行。
- 不要在
yield方法中捕获局部变量用于异步/多线程场景(闭包变量会被共享),需小心生命周期- 无法在
catch块中使用yield return,但可在try内或外分别处理- 调试时注意:断点可能不会在首次调用方法时命中,而是在第一次
MoveNext()时才进入基本上就这些。用好
yield return,能让集合处理更轻量、更清晰、更符合 C# 的惯用风格。
# 大数据 # c# # foreach # try # catch # break # 局部变量 # 斐波那契数列 # 循环 # 接口 # finally # 线程 # 多线程 # var # 闭包 # console # 对象 # 异步 # 遍历 # 时才 # 可在 # 能有 # 自定义 # 迭代 # 也不 # 是在 # 首次 # 适用于
相关文章: 如何快速搭建高效简练网站? 建站之星导航配置指南:自助建站与SEO优化全解析 韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南 如何在Golang中指定模块版本_使用go.mod控制版本号 洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些? 深圳网站制作案例,网页的相关名词有哪些? 建站之星Pro快速搭建教程:模板选择与功能配置指南 如何通过虚拟主机快速搭建个人网站? 已有域名和空间如何搭建网站? 建站之星后台密码如何安全设置与找回? 网站建设设计制作营销公司南阳,如何策划设计和建设网站? 建站之星客服服务时间及联系方式如何? 山东云建站价格为何差异显著? 广州顶尖建站服务:企业官网建设与SEO优化一体化方案 如何通过网站建站时间优化SEO与用户体验? 巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成 建站168自助建站系统:快速模板定制与SEO优化指南 建站主机选哪种环境更利于SEO优化? 胶州企业网站制作公司,青岛石头网络科技有限公司怎么样? 家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作? 小型网站建站如何选择虚拟主机? 如何通过主机屋免费建站教程十分钟搭建网站? 如何零基础在云服务器搭建WordPress站点? 如何高效完成独享虚拟主机建站? 南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样? 网站制作公司排行榜,抖音怎样做个人官方网站 潍坊网站制作公司有哪些,潍坊哪家招聘网站好? 子杰智能建站系统|零代码开发与AI生成SEO优化指南 开源网站制作软件,开源网站什么意思? 平台云上自助建站如何快速打造专业网站? 广州商城建站系统开发成本与周期如何控制? 建站之星北京办公室:智能建站系统与小程序生成方案解析 高端企业智能建站程序:SEO优化与响应式模板定制开发 正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好? 北京网站制作网页,网站升级改版需要多久? 如何在阿里云购买域名并搭建网站? Swift中swift中的switch 语句 ,制作一个手机app网站要多少钱? 深圳网站制作公司好吗,在深圳找工作哪个网站最好啊? 如何选择高效可靠的多用户建站源码资源? 如何用PHP快速搭建CMS系统? 如何挑选高效建站主机与优质域名? 制作网站软件推荐手机版,如何制作属于自己的手机网站app应用? 建站主机选购指南与交易推荐:核心配置解析 建站主机如何选?性能与价格怎样平衡? 香港服务器部署网站为何提示未备案? Python如何创建带属性的XML节点 建站之星如何快速生成多端适配网站? 建站之星下载版如何获取与安装? 如何用IIS7快速搭建并优化网站站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。