C#迭代器方法和yield用法

embedded/2024/11/13 9:40:42/

一.迭代器方法介绍

可使用foreach循环进行遍历的方法,称为迭代器方法。

迭代器方法使用yield return语句返回元素。 到达yield return语句时,会记住当前在代码中的位置。 下次调用迭代器函数时,将从该位置开始执行。换言之,如果语句中出现yield关键字,则意味着它出现的方法是迭代器方法。

在以下示例中,foreach 循环的首次迭代使 SomeNumbers 迭代器方法执行,直至到达第一个 yield return 语句。 此迭代返回的值为 3,并保留当前在迭代器方法中的位置。 在循环的下次迭代中,迭代器方法的执行将从其暂停的位置继续,直至到达 yield return 语句后才会停止。 此迭代返回的值为 5,并再次保留当前在迭代器方法中的位置。 到达迭代器方法的结尾时,循环完成。

    class MainClass{public static IEnumerable SomeNumbers(){yield return 3;yield return 5;yield return 8;}static void Main(){foreach (int number in SomeNumbers()){Console.Write(number.ToString() + " ");}}}/* Output:3 5 8*/

迭代器方法的返回类型必须为IEnumerable,IEnumerator,IEnumerable<T>或IEnumerator<T>。可以使用yield break语句来终止迭代。

在迭代器方法中除了yield return外,不允许出现普通的return语句。

二.通过迭代器方法快速创建迭代器

在下例中,如果不使用yield return语法,则需创建一个类实现IEnumerator接口,实现MoveNext、Current和reset方法。可见yield是一种语法糖,简化了创建迭代器的复杂性。

    public class DaysOfTheWeek : IEnumerable{private string[] days = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };public IEnumerator GetEnumerator(){for (int index = 0; index < days.Length; index++){// Yield each day of the week.yield return days[index];}}}class MainClass{static void Main(){DaysOfTheWeek days = new DaysOfTheWeek();foreach (string day in days){Console.Write(day + " ");}// Output: Sun Mon Tue Wed Thu Fri SatConsole.ReadKey();}}


http://www.ppmy.cn/embedded/112472.html

相关文章

Github 2024-09-16 开源项目周报 Top14

根据Github Trendings的统计,本周(2024-09-16统计)共有14个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目2Go项目2JavaScript项目2Shell项目2Rust项目2C++项目2Jupyter Notebook项目1C#项目1React: 用于构建用户界面的JavaS…

高防IP是如何防御攻击

DDoS攻击作为网络攻击中最常见的一种&#xff0c;一般利用大量的虚假流量向目标服务器发起攻击&#xff0c;进而堵塞网络损耗服务器性能&#xff0c;使服务器呈现崩溃状态&#xff0c;令真正的用户无法正常访问发送请求。以前的大型企业通常都是使用高防服务器来抵抗这类攻击&a…

C++战列舰小游戏Lv. 1.4版本(半成品)

相比较 1.2 ,增加了升级模块 C战列舰小游戏Lv. 1.2版本(半成品)-CSDN博客 相比较1.3&#xff0c;有了大规模完善和模块增加 C战列舰小游戏Lv. 1.3版本(半成品)-CSDN博客 这是一组初始数据&#xff1a; a[1].gas1000; a[1].attack0; a[1].att_10; a[1].att_20;…

STP 笔记

一、STP&#xff1a;Spanning Tree Protocol STP&#xff1a;802.1d RSTP&#xff1a;802.1w MSTP&#xff1a;802.1s 二、华为 vs 思科&#xff1a; 华为&#xff08;公有&#xff09; 思科 ---------------------------------------------------…

python的文件的自动化处理

常见的文件自动化处理 输出当前路径下的所所有文件及文件夹快捷查看某路径喜爱所有文件查询文件具体的详细信息文件批量重命名快速去重文本重复 1、解释说明 输出当前路径下的所有文件及文件夹&#xff1a;使用os模块的listdir()函数&#xff0c;可以列出指定目录下的所有文…

python多线程程序设计 之一

python多线程程序设计 之一 全局解释器锁线程APIsthreading.active_count()threading.current_thread()threading.excepthook(args, /)threading.get_native_id()threading.main_thread()threading.stack_size([size]) 线程对象成员函数构造器start/runjoin 线程子类 实列代码 …

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…

Springboot中mybatis的使用

一.创建Springboot项目并加载依赖 1.利用IDEA创建SpringBoot项目&#xff0c;并勾选必须依赖&#xff0c;步骤如下&#xff08;IDEA版本为2024版&#xff09; 注意&#xff1a; 1.首先更换镜像源&#xff0c;否则加载配置环境比较慢&#xff0c;网上搜阿里的镜像源就行。 2…