C# 枚举器和迭代器(常见迭代器模式)

常见迭代器模式

前面两节的内容显示了我们可以创建迭代器来返回可枚举类型或枚举器。图19-11总结了如

何使用常见的迭代器模式。

  • 当我们实现返回枚举器的迭代器时,必须通过实现GetEnumerator来让类可枚举,它返回
    由迭代器返回的枚举器,如图19-11中左半部分所示。
  • 在类中实现返回可枚举类型的迭代器时,我们可以让类实现GetEnumerator来让类本身可
    枚举,或不实现GetEnumerator,让类不可枚举。
    • 如果实现GetEnumerator,让它调用迭代器方法以获取自动生成的实现1Enumerab1e
      的类实例。然后,从iFnumerab1e对象返回由GetEnumerator创建的枚举器,如图19-11
      右边所示。
    • 如果通过不实现GetEnumerator使类本身不可枚举,仍然可以使用由迭代器返回的可枚
      举类,只需要直接调用迭代器方法,如图19-11中右边第二个foreach语句所示。

产生多个可枚举类型

在下面的示例中,spectrurn类有两个可枚举类型的迭代器------ 一个从紫外线到红外线枚举光

谱中的颜色,而另一个以逆序进行枚举。注意,尽管它有两个方法返回可枚举类型,但类本身不

是可枚举类型,因为它没有实现GetEnumerator。

csharp 复制代码
using System;
using System.Collecions.Generic;

class Spectrum
{
    string[] colors={"violet","blue","cyan","green","yellow","orange","red"};

    public IEnumerable<string>UVtoIR()
    {
        for(int i=0;i<colors.Length;i++)
            yield return colors[i];
    }

    public IEnumerable<string>IRtoUV()
    {
        for(int i=colors.Length-1;i>=0;i--)
            yield return colors[i];
        Console.WriteLine();

        foreach(string color in Spectrum.IRtoUV())
            Console.Write($"{color}");
        Console.WriteLine();
    }
}
相关推荐
这个DBA有点耶14 分钟前
SQL优化进阶:读懂“索引下推”,告别回表噩梦
数据库·sql·性能优化
发量惊人的中年网工1 小时前
如何验证DDoS高防真的生效?从源站隐藏到正常访问的完整验收方法
运维·网络·数据库·ddos
Aloudata1 小时前
数据治理台账 vs 元数据知识图谱:数据资产如何从文档走向计算化
数据库·人工智能·知识图谱·数据治理·元数据·数据资产·数据血缘
qq_589666051 小时前
C语言、C++与C#的区别详解
c语言·c++·c#
jnrjian1 小时前
oraasmaudit Oracle ASM
数据库·oracle
A15362552 小时前
WMS 智能仓情系统推荐:如何实现仓库全局可视与数字化管控
运维·数据库·人工智能
又是重名了2 小时前
大数据量导出 优化方案多版 第五版
数据库·优化·导出·大数据量
Data_Journal2 小时前
如何使用 Python 抓取 Google Flights:分步指南
大数据·开发语言·数据库·python·scrapy
深藏bIue2 小时前
PostgreSQL 冻结与死元组回收
数据库·postgresql
滨哥GPT2 小时前
Codex修改数据库后项目启动失败怎么办?Migration、Schema与数据结构排查
数据库·ai编程·开发工具·schema·codex