C#中的yield关键字怎么用 C#使用yield return实现迭代器

yield关键字用于简化迭代器实现,支持惰性求值和内存优化;通过yield return逐个返回元素,yield break提前终止迭代,适用于大数据流、递归结构等场景;使用时需注意不能包含ref/out参数、不可在lambda中使用,且异常可能在遍历时才抛出。

c#中的yield关键字怎么用 c#使用yield return实现迭代器

在C#中,yield 关键字用于简化迭代器的实现,让你可以轻松创建一个能够被 foreach 遍历的对象,而无需手动实现 IEnumerableIEnumerator 接口。它主要用在方法、属性或索引器中,返回可枚举的集合。

yield return 的基本用法

当你在一个返回类型为 IEnumerableIEnumerator 的方法中使用 yield return,每次执行到 yield return 时,会返回一个元素,并记住当前执行位置,下次继续从下一条语句开始执行。

示例:生成一个简单的数字序列

“`csharpusing System;using System.Collections.Generic;

public static IEnumerable GetNumbers(){yield return 1;yield return 2;yield return 3;yield return 4;yield return 5;}

// 使用foreach (int num in GetNumbers()){Console.WriteLine(num);}

输出:
12345

这个方法看起来像是一次性返回多个值,实际上它是“惰性求值”——只有在遍历时才会逐个产生值,节省内存和提升性能。

yield break 中断迭代

yield break 用于提前终止迭代,类似于普通方法中的 break

示例:根据条件中断遍历

```csharppublic static IEnumerable GetNumbersUntil(int max){ int i = 1; while (true) { if (i > max) yield break; // 停止迭代 yield return i++; }}

调用 GetNumbersUntil(3) 会返回 1, 2, 3,然后停止。

实际应用场景

yield 特别适合处理大数据流、递归结构或需要延迟加载的场景。

示例:遍历二叉树(中序)

```csharppublic class TreeNode{ public int Value; public TreeNode Left; public TreeNode Right;

public IEnumerable 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;}

}

这种方式代码简洁,且不会一次性把所有节点放入列表,节省内存。

注意事项

  • 使用 yield 的方法不能包含 refout 参数。
  • 不能在匿名方法或 lambda 表达式中使用 yield
  • 异常处理中要小心:yield 方法中的异常可能在遍历时才抛出。
  • 返回的是状态机对象,多次遍历不会重复执行逻辑,除非重新调用方法。

基本上就这些。yield 让你写出更清晰、高效的迭代逻辑,特别适合自定义集合遍历。掌握它,能让代码更 C# 化。

以上就是C#中的yield关键字怎么用 C#使用yield return实现迭代器的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 18:02:44
下一篇 2025年12月17日 18:02:50

相关推荐

发表回复

登录后才能评论
关注微信