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

C#迭代器方法和yield用法

一.迭代器方法介绍

可使用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.mrgr.cn/news/24076.html

相关文章:

  • 分类预测|基于雪消融优化BP神经网络的数据分类预测Matlab程序SAO-BP 多特征输入多类别输出 含基础程序
  • 线程的六种状态
  • Java重修笔记 第五十三天 坦克大战(一)绘图入门
  • Go语言现代web开发08 if和switch分支语句
  • 2024年智能录屏解决方案全攻略,从桌面到云端
  • K8s之DNS方案
  • Golang | Leetcode Golang题解之第397题整数替换
  • 8.10Laplacian算子
  • 『功能项目』播放动画时禁止点击移动【40】
  • C++第五节 - this指针、构造函数、析构函数
  • C++ | Leetcode C++题解之第398题随机数索引
  • 全球热门剪辑软件大搜罗
  • 项目答辩总结
  • JavaScript --while案例求一个数字的阶乘
  • 骑砍2霸主MOD开发(26)-使用TrfExporterBlender制作TRF文件
  • QScopedPointer的了解
  • 【LVI-SLAM】RTK、GPS和GNSS定位技术
  • Windows句柄HANDLE是一个指向系统资源的唯一标识符
  • HW | AMD GPU上 “nvidia-smi -lms” 的等价指令——MI300X实时查看GPU使用率
  • 【安全漏洞】Apache Tomcat 高危漏洞版本