全网整合营销服务商

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

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

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

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

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

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

yield 的基本用法

方法、属性或运算符的返回类型为 IEnumerableIEnumerableIEnumeratorIEnumerator 时,就可以使用 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 实现任意复杂的遍历逻辑,比如遍历树结构、过滤数据、生成无限序列等。

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

public IEnumerable OddNumbers(int start, int count) { int found = 0; int current = start;
while (found zuojiankuohaophpcn 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 让你写出简洁、高效、内存友好的迭代逻辑,特别适合处理大数据流或需要延迟计算的场景。


# 大数据  # stream  # 区别  # c#  # .net  # String  # NULL  # 运算符  # if  # count  # while  # foreach  # break  # int  # 循环  # 接口  # public  # 匿名方法  # console  # number  # 迭代  # 能在  # 遍历  # 下次  # 自定义  # 时才  # 更早  # 让你  # 求值  # 可以用 


相关文章: 佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何选择美橙互联多站合一建站方案?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  如何零基础开发自助建站系统?完整教程解析  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在七牛云存储上搭建网站并设置自定义域名?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  建站之星2.7模板快速切换与批量管理功能操作指南  css网站制作参考文献有哪些,易聊怎么注册?  如何选择建站程序?包含哪些必备功能与类型?  c++ stringstream用法详解_c++字符串与数字转换利器  如何在企业微信快速生成手机电脑官网?  如何快速搭建虚拟主机网站?新手必看指南  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何正确下载安装西数主机建站助手?  如何获取免费开源的自助建站系统源码?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  如何在阿里云部署织梦网站?  如何用PHP快速搭建高效网站?分步指南  开封网站制作公司,网络用语开封是什么意思?  家具网站制作软件,家具厂怎么跑业务?  如何基于云服务器快速搭建网站及云盘系统?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何在VPS电脑上快速搭建网站?  C#如何使用XPathNavigator高效查询XML  建站VPS推荐:2025年高性能服务器配置指南  定制建站如何定义?其核心优势是什么?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  盐城做公司网站,江苏电子版退休证办理流程?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  建站之星logo尺寸如何设置最合适?  如何高效利用200m空间完成建站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  c++怎么用jemalloc c++替换默认内存分配器【性能】  如何用搬瓦工VPS快速搭建个人网站?  网站制作新手教程,新手建设一个网站需要注意些什么?  制作网站的软件免费下载,免费制作app哪个平台好?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  微信小程序 五星评分(包括半颗星评分)实例代码  制作网站怎么制作,*游戏网站怎么搭建?  浅谈Javascript中的Label语句  如何挑选高效建站主机与优质域名?  如何快速搭建高效简练网站?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  黑客入侵网站服务器的常见手法有哪些?  如何在阿里云完成域名注册与建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。