全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#怎么使用yield return C#迭代器实现方法

yield return 是 C# 中实现自定义迭代器的简洁高效方式,编译器将其转为状态机支持延迟执行;方法返回 IEnumerable 或 IEnumerator,不可含 return 语句(除 yield break)、ref/out 参数或 try-catch 包裹 yield;适用于大数据、IO 流及无限序列。

在C#中,yield return 是实现自定义迭代器最简洁、高效的方式,它让方法能逐个返回元素,而无需手动实现 IEnumerableIEnumerator 接口。

yield return 的基本用法

标记为 yield return 的方法必须返回 IEnumerableIEnumerator,且不能有 return 语句(除 yield break 外),也不能有 ref/out 参数或 try-catch 包裹 yield 语句(但可在 try 外或 finally 中使用)。

编译器会将该方法自动转换为一个状态机类,支持延迟执行和按需生成数据。

  • 每次调用 MoveNext() 时,代码从上一次暂停处继续执行,直到下一个 yield return 或方法结束
  • 值在真正遍历时才计算,适合处理大数据、IO 流或无限序列
  • 方法内可混合普通逻辑与 yield return,比如条件判断、循环嵌套

简单示例:生成斐波那契数列前 N 项

以下方法返回前 n 个斐波那契数:

public static IEnumerable Fibonacci(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 IEnumerable FlattenAndFilter(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 方法不是普通方法调用——它不立即执行,而是返回一个可枚举对象;只有在 foreachToList()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小时内与您取得联系。