C#如何使用yield return关键字 C#迭代器实现方法

星降
发布: 2025-12-19 09:31:02
原创
290人浏览过
yield return 是 C# 中实现延迟执行、节省内存的自定义迭代器的核心机制,支持按需生成序列、树遍历等场景,但受限于方法签名与语法约束。

c#如何使用yield return关键字 c#迭代器实现方法

在C#中,yield return 是实现自定义迭代器最简洁、高效的方式,它让方法能按需生成序列,无需一次性构造整个集合,节省内存且支持延迟执行。

yield return 的基本用法

yield return 修饰的方法必须返回 IEnumerable<t></t>IEnumerator<t></t>,且不能有 return 语句(除 return; 外),也不能有 ref/out 参数或 try-catch 块(除非 catch 内无 yield,且 finally 中不能有 yield)。

每次调用迭代器的 MoveNext(),代码从上一次 yield return 暂停处继续执行,直到下一个 yield return 或方法结束。

  • 每个 yield return 返回一个元素,控制权交还给调用方
  • yield break 可提前终止迭代,等效于自然退出
  • 编译器会将含 yield 的方法自动转换为状态机类(编译后可见)

实现简单数值序列的迭代器

例如生成 1 到 n 的平方数:

public static IEnumerable<int> Squares(int n)
{
    for (int i = 1; i <= n; i++)
    {
        yield return i * i;
    }
}
登录后复制

调用时可直接用于 foreach 或 LINQ:

foreach (int sq in Squares(5))
    Console.WriteLine(sq); // 输出 1, 4, 9, 16, 25
登录后复制

注意:该方法不会立即执行循环,只有在第一次枚举时才开始计算——这就是延迟执行

用 yield return 实现树的中序遍历

递归 + yield 是处理嵌套结构的常用模式。假设有一个二叉树节点类:

Dream Machine
Dream Machine

Dream Machine 是由 Luma AI 开发的一款 AI 视频生成工具,可以快速将文本和图像转换为高质量的视频内容。

Dream Machine 165
查看详情 Dream Machine
public class TreeNode
{
    public int Value { get; set; }
    public TreeNode Left { get; set; }
    public TreeNode Right { get; set; }
}
登录后复制

中序遍历(左-根-右)可这样写:

public static IEnumerable<int> InOrder(TreeNode node)
{
    if (node == null) yield break;
<pre class="brush:php;toolbar:false;">foreach (var v in InOrder(node.Left))  yield return v;
yield return node.Value;
foreach (var v in InOrder(node.Right)) yield return v;
登录后复制

}

这种方式逻辑清晰,避免手动维护,也保持了延迟求值特性——遍历到哪才计算到哪。

注意事项与常见误区

yield return 看似简单,但容易踩坑:

  • 不能在匿名方法、lambda 表达式或异步方法(async)中使用 yield
  • 局部变量在多次迭代中会被保留(闭包行为),注意引用生命周期
  • 每次调用迭代器方法都会创建新的枚举器,互不影响;但若方法内捕获了外部可变状态,需谨慎线程安全
  • 调试时无法在 yield return 行设断点(VS 中可能跳过),建议用日志或拆分逻辑辅助排查

基本上就这些。掌握 yield return 后,写数据流处理、配置解析、文件逐行读取等场景会变得非常自然和轻量。

以上就是C#如何使用yield return关键字 C#迭代器实现方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号