当前位置: 首页 > ds >正文

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

常见迭代器模式

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

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

常见迭代器模式

产生多个可枚举类型

在下面的示例中,spectrurn类有两个可枚举类型的迭代器—— 一个从紫外线到红外线枚举光
谱中的颜色,而另一个以逆序进行枚举。注意,尽管它有两个方法返回可枚举类型,但类本身不
是可枚举类型,因为它没有实现GetEnumerator。

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();}
}
http://www.xdnf.cn/news/16857.html

相关文章:

  • VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮
  • ubuntu22.04系统入门 linux入门 简单命令基础复习 实现以及实践
  • 经典屏保问题 - 华为OD机试真题(Java 题解)
  • pytorch程序语句固定开销分析
  • dubbo源码之消费端启动的高性能优化方案
  • 28. 找出字符串中第一个匹配项的下标
  • C++-2025.7.31
  • 1️⃣4️⃣ OOP:类、封装、继承、多态
  • H.266 vs H.265/AV1/H.264:从工程落地看下一代视频系统的技术演进
  • 第三十一篇 AI的“能力考”:模型评估、保存与加载的艺术【总结前面3】
  • MBR与GPT分区表深度解析:硬盘分区该怎么选?
  • pip库版本升级
  • Android Studio 中Revert Commit、Undo Commit 和 Drop Commit 使用场景
  • Android Studio怎么显示多排table,打开文件多行显示文件名
  • 现在有哪些广泛使用的时序数据库?
  • [免费]基于Python的招聘职位信息推荐系统(猎聘网数据分析与可视化)(Django+requests库)【论文+源码+SQL脚本】
  • [mind-elixir]Mind-Elixir 的交互增强:单击、双击与鼠标 Hover 功能实现
  • Web3.0 和 Web2.0 生态系统比较分析:差异在哪里?
  • 【Datawhale AI夏令营】科大讯飞AI大赛(大模型技术)/夏令营:让AI理解列车排期表(Task3)
  • 【python 获取邮箱验证码】模拟登录并获取163邮箱验证码,仅供学习!仅供测试!仅供交流!
  • uni-app webview的message监听不生效(uni.postmessage is not a function)
  • linux 执行sh脚本,提示$‘\r‘: command not found
  • 从一开始的网络攻防(十四):WAF绕过
  • day21-Excel文件解析
  • 【MySQL 数据库】MySQL索引特性(一)磁盘存储定位扇区InnoDB页
  • AI 代码助手在大前端项目中的协作开发模式探索
  • C++ Qt网络编程实战:跨平台TCP调试工具开发
  • 容器与虚拟机的本质差异:从资源隔离到网络存储机制
  • 2020 年 NOI 最后一题题解
  • Apple基础(Xcode②-Flutter结构解析)