前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# yeild

C# yeild

作者头像
JusterZhu
发布2023-11-27 14:44:00
1280
发布2023-11-27 14:44:00
举报
文章被收录于专栏:JusterZhuJusterZhu

在编程语言中,迭代器是一种可以遍历容器(如列表或数组)的元素的对象。在C#中,我们可以使用yield关键字创建自定义的迭代器。yield是一个强大的关键字,它使我们能够使用简洁、清晰的语法来创建和管理迭代器。

什么是Yield?

在C#中,yield关键word用于指定一个迭代器块,也就是提供可枚举接口实现的方法。该关键字可以帮助我们更简洁地构建出返回系列值的方法。这些值可以在循环结构(如 foreach)中使用。

Yield的使用方法

让我们通过一个例子来看看如何使用yield

代码语言:javascript
复制
public static IEnumerable<int> GetNumbers()
{
    for (int i = 0; i < 10; i++)
    {
        yield return i;
    }
}

在上述代码中,GetNumbers函数返回一个IEnumerable<int>,这有助于我们在foreach循环中遍历结果:

代码语言:javascript
复制
foreach(var number in GetNumbers())
{
    Console.WriteLine(number);
}

其他使用方式

除了先前提到的基础用法,yield关键字还可以与break配合使用来提前退出迭代。在遇到yield break时,迭代器立即停止执行并结束迭代。

让我们看一个例子:

代码语言:javascript
复制
public static IEnumerable<int> GetNumbers()
{
    for (int i = 0; i < 10; i++)
    {
        if(i == 5)
            yield break;
        
        yield return i;
    }
}

在上述代码中,当 i 等于 5 时,yield break 语句被执行,使得循环终止,返回的序列只包含 0, 1, 2, 3, 4.

另外,yield 还可以用于创建无限的数据结构(虽然在实际情况中我们会通过某种方式限制迭代次数)。例如,下面这个函数可生成一个无限的整数序列:

代码语言:javascript
复制
public static IEnumerable<int> GenerateInfiniteSequence()
{
    int i = 0;
    while (true)
    {
        yield return i++;
    }
}

使用如下代码可以获取前10个元素:

代码语言:javascript
复制
foreach(int number in GenerateInfiniteSequence().Take(10))
{
    Console.WriteLine(number);
}

Yield的特性

  1. 延迟执行yield关键字会创建一个延迟执行的迭代器。只有当你开始遍历它时,才会执行产生数据的代码。
  2. 状态机yield关键字基本上创建了一个状态机。每次调用MoveNext()方法时,它都会从最后一个yield return处开始执行,直到遇到下一个yield return
  3. 内存优化:因为使用了延迟执行的特性,所以yield关键字在处理大数据集合时非常有用,它不需要一次性加载所有数据到内存中,只需按需加载。

注意事项

尽管yield是一个强大的工具,但在使用它时也应注意以下几点:

  • yield return语句之前不能有try-catch块,不过可以在其内部或之后使用。
  • 不能在finally块中使用yield return
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JusterZhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Yield?
  • Yield的使用方法
    • 其他使用方式
    • Yield的特性
    • 注意事项
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档