C# 怎么使用 yield return 实现迭代器_C# yield return 迭代器使用教程


yield return 可实现延迟执行,如遍历 GetOddNumbers 时每次按需生成奇数,避免内存浪费。

c# 怎么使用 yield return 实现迭代器_c# yield return 迭代器使用教程

在 C# 中,yield return 是一种简洁高效的方式来实现自定义迭代器,而无需手动创建集合或实现 IEnumerableIEnumerator 接口。它让方法在每次返回一个元素后暂停执行,下次继续从暂停处恢复,非常适合处理大数据集或需要延迟计算的场景。

yield return 基本语法

使用 yield return 的方法必须返回以下类型之一:

  • IEnumerable<t></t>
  • IEnumerator<t></t>
  • IEnumerable
  • IEnumerator

方法中每遇到一次 yield return,就会向枚举器提供一个值,并暂时退出。当枚举器请求下一个元素时,执行从中断处继续。

public static IEnumerable<int> GetNumbers()
{
    yield return 1;
    yield return 2;
    yield return 3;
    yield return 4;
}

调用该方法并遍历:

foreach (int num in GetNumbers())
{
    Console.WriteLine(num);
}
// 输出:
// 1
// 2
// 3
// 4

延迟执行与内存优化

yield return 最大的优势是延迟执行(Lazy Evaluation):元素只在被请求时才生成,而不是一次性全部计算并存储在内存中。

例如,生成 1 到 n 的奇数序列:

NoCode NoCode

美团推出的零代码应用生成平台

NoCode 180 查看详情 NoCode
public static IEnumerable<int> GetOddNumbers(int max)
{
    for (int i = 1; i <= max; i += 2)
    {
        yield return i;
    }
}

即使 max 是 100 万,也不会占用大量内存,因为数字是按需生成的。

实际应用场景示例

常见用途包括遍历树结构、读取大文件、分页数据等。

比如遍历二叉树的中序序列:

public class TreeNode
{
    public int Value;
    public TreeNode Left;
    public TreeNode Right;
<pre class='brush:php;toolbar:false;'>public IEnumerable<int> InOrder()
{
    if (Left != null)
        foreach (int val in Left.InOrder())
            yield return val;

    yield return Value;

    if (Right != null)
        foreach (int val in Right.InOrder())
            yield return val;
}

}

这种方式代码清晰,且不会一次性构建完整的结果列表。

注意事项与限制

  • 不能在匿名方法、lambda 表达式或 try 块中含有 catch 子句的环境中使用 yield return
  • 可以配合 try-finally 使用,用于资源清理。
  • 方法一旦开始迭代,内部状态由编译器自动生成的状态机管理。
  • 如果多次枚举同一个 yield return 方法结果,每次都会重新执行逻辑。

基本上就这些。合理使用 yield return 能写出更高效、更易读的迭代代码,尤其适合处理流式数据或无限序列。掌握它,能让你的 C# 编程更加灵活。

以上就是C# 怎么使用 yield return 实现迭代器_C# yield return 迭代器使用教程的详细内容,更多请关注其它相关文章!


# 能在  # 优化网站怎么合理搭建的  # 网站推广职业兴趣  # 采购线上培训网站推广  # 北白象网站建设方案  # 廉江外贸网站建设  # 安阳创意网站建设  # 精准营销及推广策略研究  # 晋中哪里网站建设很好  # 潍城区营销网络推广公司  # 北京seo软件实力乐云seo品牌  # 大数据  # 修饰符  # 子句  # 是一种  # 按需  # 应用程序  # 面向对象  # 两种  # 遍历  # 迭代  # c# 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 如何高效地基于键列值映射DataFrame中的多个列  使用AI在VS Code中将代码从一种语言翻译成另一种  《虎扑》取消评分记录方法  search中maxlength属性用法解析  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  优化Google Charts Gauge:在数据库无数据时显示默认值  快手网页版官方访问 快手网页版页面在线打开  小红书网页版首页入口 小红书网页版电脑端官方登录链接  芒果TV官网登录入口 芒果TV官方网站登录入口  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  德邦物流在线查询系统 德邦快递货物运输追踪  手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧  Google Drive API 认证:服务账户与OAuth 2.0的选择与实践  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  酷狗音乐多音轨设置教程  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  123平台官方登录入口 123邮箱网页端在线沟通工具  C++ switch case字符串_C++如何实现字符串switch匹配  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  使用Python和NLTK从文本中高效提取名词的实用教程  2025SNH48年度青春盛典门票价格及购买方式  如何定制PrimeNG Sidebar的背景颜色  《下一站江湖2》武器获取方法  TikTok视频播放中断怎么办 TikTok播放异常修复方法  如何通过settings.json个性化您的VS Code体验  Keras中Convolution2D层及其核心辅助层详解  AO3中文入口稳定分享_AO3官网HTTPS看文详解  极兔快递官网查询入口手机版 手机极兔快递登录查询入口官方  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  《下一站江湖2》风神腿获取攻略  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  C++二维数组动态分配方法_C++指针与数组内存布局  vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  b站如何剪辑视频_b站必剪app使用教程  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  胃动力不足?试试这5个调理方法  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  发博客与长微博技巧  邮政快递寄件查询入口 邮政快递收件查询入口  windows10怎么更改下载路径_windows10默认存储位置修改教程  《长生:天机降世》火塔小怪大全  J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践 

 2025-11-24

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.