C# IEnumerator 用法

news/2025/2/11 5:26:01/

一、概述

IEnumerator 是所有非泛型枚举器的基接口。 其泛型等效项是 System.Collections.Generic.IEnumerator<T> 接口。

C# 语言的 foreach 语句(在 Visual Basic 中为 for each)隐藏了枚举数的复杂性。 因此,建议使用 foreach 而不是直接操作枚举器。

枚举器可用于读取集合中的数据,但不能用于修改基础集合。

方法 Reset 为实现 COM 互操作性而提供,不需要完全实现;相反,实现者可能会引发 NotSupportedException。

最初,枚举数定位在集合中第一个元素的前面。 在读取 的值Current之前,必须调用 MoveNext 方法以将枚举数推进到集合的第一个元素;否则为Current未定义。

在调用 Current 或 MoveNext 之前,Reset 返回同一对象。 MoveNext 将 Current 设置为下一个元素。

如果 MoveNext 传递集合的末尾,则枚举器位于集合中最后一个元素之后,并 MoveNext 返回 false。 当枚举器位于此位置时,对 MoveNext 的后续调用也会返回 false。 如果最后一次MoveNext调用返回 ,falseCurrent则为未定义。

若要再次设置为Current集合的第一个元素,可以调用 (如果已实现),然后调用 ResetMoveNext。 如果未 Reset 实现 ,则必须创建新的枚举器实例以返回到集合的第一个元素。

如果对集合进行了更改(例如添加、修改或删除元素),则枚举器的行为是不确定的。

枚举数没有对集合的独占访问权;因此,从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。 即使某个集合已同步,其他线程仍可以修改该集合,这会导致枚举数引发异常。 若要确保枚举过程中的线程安全性,可以在整个枚举期间锁定集合,或者捕获由其他线程进行的更改所导致的异常。

二、用法

IEnumerator 属性只有一个:Current,IEnumerator 方法只有两个,MoveNext 和 Reset。

Current    

获取集合中位于枚举数当前位置的元素。

MoveNext()    

将枚举数推进到集合的下一个元素,并返回一个布尔值,指示是否成功移动到下一个元素,如果成功移动到下一个元素,则返回 true,否则,返回 false

Reset()    

将迭代器重置到集合的起始位置。在调用Reset()方法之后,应该再次调用MoveNext()方法来将迭代器移动到第一个元素。

示例:

using System;
using System.Collections;class Program
{static void Main(string[] args){ArrayList list = new ArrayList();list.Add("Apple");list.Add("Banana");list.Add("Orange");IEnumerator enumerator = list.GetEnumerator();while (enumerator.MoveNext()){string element = (string)enumerator.Current;Console.WriteLine(element);}Console.WriteLine("=============================");enumerator.Reset();while (enumerator.MoveNext()){string element = (string)enumerator.Current;Console.WriteLine(element);}}
}

运行:

IEnumerator 的本身内容比较少,属性和方法在文章的上面做了详细的介绍,IEnumerator 在我们平时的开发中,用的非常的少,一般情况下,都是用 for、foreach,另外在设计模式中,有一个模式叫 “迭代器模式” 会用到 IEnumerator,总结就是:可以了解了解,不特别推荐使用。

end


http://www.ppmy.cn/news/905590.html

相关文章

治愈选车困难症只需11.98万起!传祺影酷正式上市

9月25日&#xff0c;传祺影酷打破传统新车上市发布会模式&#xff0c;邀请李诞、杨笠、吴星辰、张踩铃、小北等脱口秀大咖化身影酷Talker&#xff0c;通过一场比脱口秀还秀的发布会&#xff0c;正式宣布上市。新车共推出三种动力选择&#xff0c;共8款配置车型&#xff0c;官方…

凯酷键盘KC-84 大写和ctrl 功能调换问题

原因&#xff1a;不明&#xff0c;可能是不小心按到了那个键子 解决方案&#xff1a; fn ctrl PS&#xff1a; win键失灵的话&#xff0c;可以试试fn win

卡巴7破解

1)删除KEY 2)执行key.reg Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\SPC\Certificates] [-HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\LicStorage] [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG]3&…

长安车机工具箱-长安车机升级-长安车机破解

支持长安UNIK_UNIT_UNIV_锐程PLUS_二代CS75PLUS_二代CS55PLUS 手搓代码参考&#xff1a; 解锁车机分区adb devices #列出adb设备adb root #adb进入root权限adb disable-verity #关闭分区检测ad…

酷开会员丨酷开系统亲子频道,用心陪伴孩子成长!

孩子的童年是宝贵的&#xff0c;珍惜每一天的成长&#xff0c;从陪伴开始。加入酷开会员&#xff0c;和酷开系统一起&#xff0c;陪伴孩子享受欢乐时光。童年的世界里&#xff0c;应该充满了棒棒糖和动画片。打开电视&#xff0c;和孩子一起度过一段快乐时光吧&#xff01;酷开…

酷开系统丨酷开会员寓教于乐,让孩子在“玩”中学起来!

在这个“内容为王”的时代&#xff0c;人们每天都在接收着各种各样的信息&#xff0c;互联网时代让信息的获取门槛一降再降&#xff0c;甚至是最容易被信息所误导的儿童也能够通过电子设备从网上轻松浏览任何信息&#xff0c;因此很多家长也在担心孩子会受到网络上的负面信息影…

7-6 7-7 7-8 7-9 7-10

目录 7-6 聪明的高斯(简) 7-7 快速求和 7-8 买U盘 7-9 买复印纸 7-10 黑白三子棋局 7-6 聪明的高斯(简) 分数 10 全屏浏览题目 切换布局 作者 李祥 单位 湖北经济学院 著名德国数学家高斯(Gauss)上小学时&#xff0c;老师让大家计算&#xff1a; 1234⋯100 ? 当大家…

7-7 一帮一

“一帮一学习小组”是中小学中常见的学习组织方式&#xff0c;老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作&#xff0c;即在得到全班学生的排名后&#xff0c;在当前尚未分组的学生中&#xff0c;将名次最靠前的学…