新闻中心

.NET中的yield关键字是什么?如何用它创建自定义的迭代器?

2025-11-26
浏览次数:
返回列表
yield关键字用于简化迭代器实现,通过yield return返回元素并暂停执行,下次继续,而yield break可提前终止迭代;它适用于返回IEnumerable或IEnumerator的方法,实现惰性求值,如生成序列、过滤数据等,且编译器会将其转换为状态机,注意不能在C# 7及更早版本的匿名或async方法中使用。

.net中的yield关键字是什么?如何用它创建自定义的迭代器?

yield 关键字是 C# 中用于简化迭代器实现的一个语言特性。它允许你创建一个可以按需返回元素的枚举逻辑,而无需手动实现 IEnumerableIEnumerator 接口。

当你使用 yield return 时,每次迭代到该语句时,会返回一个值,并保留当前执行位置,下次继续从该位置往后执行。当遇到 yield break 时,迭代将提前终止。

yield 的基本用法

方法、属性或运算符的返回类型为 IEnumerableIEnumerable<t></t>IEnumeratorIEnumerator<t></t> 时,就可以使用 yield 来构建自定义迭代逻辑。

public IEnumerable CountUpTo(int max) { int current = 1; while (current

调用这个方法:

foreach (int number in CountUpTo(5)) { Console.WriteLine(number); // 输出 1, 2, 3, 4, 5 }

这段代码不会一次性生成所有值,而是每次循环请求下一个值时才计算并返回,实现了惰性求值(lazy evaluation)。

如何创建自定义迭代器

你可以用 yield 实现任意复杂的遍历逻辑,比如遍历树结构、过滤数据、生成无限序列等。

Motiff妙多 Motiff妙多

Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”

Motiff妙多 334 查看详情 Motiff妙多

示例:跳过偶数,只返回奇数

public IEnumerable OddNumbers(int start, int count) { int found = 0; int current = start;
while (found < count)
{
    if (current % 2 == 1)
    {
        yield return current;
        found++;
    }
    current++;
}

}

使用方式:

foreach (int n in OddNumbers(10, 5)) { Console.WriteLine(n); // 输出前5个大于等于10的奇数:11,13,15,17,19 }

yield return 和 yield break 的区别

  • yield return:返回一个元素,并暂停执行,下次 MoveNext() 调用时继续。
  • yield break:终止迭代,不再返回更多元素。

示例:在满足条件时提前退出

public IEnumerable ReadLines() { string line; while ((line = Console.ReadLine()) != null) { if (line == "quit") yield break; // 用户输入 quit 就停止 yield return line.ToUpper(); } }

注意事项

  • 不能在匿名方法或 async 方法中使用 yield(C# 7 及更早版本限制;C# 8+ 支持 async streams,但语法不同)。
  • 编译器会将包含 yield 的方法转换成一个状态机类,自动管理迭代过程。
  • 异常处理要小心:yield 方法中的异常可能在枚举时才抛出,而不是调用时。

基本上就这些。yield 让你写出简洁、高效、内存友好的迭代逻辑,特别适合处理大数据流或需要延迟计算的场景。

以上就是.NET中的yield关键字是什么?如何用它创建自定义的迭代器?的详细内容,更多请关注其它相关文章!


# 时才  # oss和seo区别  # 网站建设用什么硬件  # 推广关键词排名优化软件  # 深圳服务网站推广技巧  # 公益网站推广视频软件  # 王通seo秘笈  # 泰安网站建设价格多少  # html 自定义标签 seo  # 单页网站seo文件  # 慈溪工装网站建设  # 怎么处理  # 什么用  # 大数据  # 下次  # 运算符  # 遍历  # 用它  # 能在  # 自定义  # 迭代  # .net  # c#  # 区别  # stream 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Tailwind CSS line-clamp 布局问题解析与修复指南  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  Win11怎么开启高性能模式_Windows 11电源计划优化设置  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  mcjs网页版在线存档 mcjs云存档登录入口  抖音从哪里进入网页版_抖音官方入口链接  顺丰国际快递查询 国际件官方查询入口  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  解决Python单元测试中Mock异常方法调用计数为零的问题  学习通网页版快速入口 学习通官网网页版直接打开  蛙漫官网漫画入口地址_蛙漫在线畅读无广告弹窗  《主播少女的秘密账号迷宫》首支宣传片  J*aScript类型检查_j*ascript代码规范  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  c++ dfs和bfs代码 c++深度广度优先搜索算法  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  铃兰之剑为这和平的世界希里技能组及加点推荐  React列表渲染与独立状态管理:避免全局状态影响局部更新  Python异步编程实践:使用Binance API构建实时交易数据流  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  uc浏览器网页版入口 uc浏览器网页版最新网址  HTML长属性值处理:表单action路径优化与代码规范应对  J*aScript中向JSON对象添加新属性的正确姿势  必由学官方平台入口 必由学在线课堂登录地址  Go语言中JSON数据解码与字段访问指南  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  qq游戏网页版直接玩_qq游戏免下载快速入口  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  在Qt QML中通过Python字典动态更新TextEdit内容的教程  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  大象笔记网页版入口 印象笔记网页版登录入口  解决移动端滚动问题的overflow属性应用指南  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  Spyder启动失败:字体文件权限拒绝错误解决方案  Python getattr() 异常处理深度解析:避免程序意外退出  PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程  在Socket.IO连接中实现Access Token自动更新与动态重连  J*a递归快速排序中静态变量导致数据累积问题的解决方案  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  excel如何生成目录 excel一键生成工作表目录超链接  在Typer应用中优雅地处理和重组任意命令行参数  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法 

搜索