如何实现IEnumerator接口分析
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这期内容当中小编将会给大家带来有关如何实现IEnumerator接口分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。/*语法:(C#)*/[ComVisibleA
千家信息网最后更新 2025年02月01日如何实现IEnumerator接口分析
这期内容当中小编将会给大家带来有关如何实现IEnumerator接口分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
/*语法:(C#)*/[ComVisibleAttribute(true)] [GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")] public interface IEnumerator
备注:
/* IEnumerator 是所有非泛型枚举数的基接口。 C# 语言的 foreach 语句(在 Visual Basic 中为 for each)隐藏了枚举数的复杂性。因此,建议 foreach,而不直接操作枚举数。枚举数可用于读取集合中的数据,但不能用于修改基础集。 最初,枚举数定位在集合中第一个元素前。Reset 方法还会将枚举数返回到此位置。在此位置,调用 Current 属性会引发异常。因此,在读取 Current 的值之前,必须调用MoveNext 方法将枚举数提前到集合的第一个元素。在调用 MoveNext 或 Reset 之前,Current 返回同一对象。MoveNext 将 Current 设置为下一个元素。 如果 MoveNext 越过集合的末尾,则枚举数将被放置在此集合中最后一个元素的后面,而且 MoveNext 返回 false。当枚举数位于此位置时,对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回 false,则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素,可以调用 Reset,然后再调用MoveNext。 只要集合保持不变,枚举数就保持有效。如果对集合进行了更改(如添加、修改或删除元素),则枚举数将失效且不可恢复,并且下一次对 MoveNext 或 Reset 的调用将引发InvalidOperationException。如果在 MoveNext 和 Current 之间修改集合,那么即使枚举数已经无效,Current 也将返回它所设置成的元素。 枚举数没有对集合的独占访问权;因此,枚举通过集合在本质上不是一个线程安全的过程。即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。 */
样例:
using System;using System.Collections;//person类public class Person{ public Person(string fName, string lName) { this.firstName = fName; this.lastName = lName; } public string firstName; public string lastName;}//People类,实现IEnumerablepublic class People : IEnumerable{ private Person[] _people; public People(Person[] pArray) { _people = new Person[pArray.Length]; for (int i = 0; i < pArray.Length; i++) { _people[i] = pArray[i]; } } public IEnumerator GetEnumerator() { return new PeopleEnum(_people); }}//实现IEnumeratorpublic class PeopleEnum : IEnumerator{ public Person[] _people; // Enumerators are positioned before the first element // until the first MoveNext() call. int position = -1; public PeopleEnum(Person[] list) { _people = list; } public bool MoveNext() { position++; return (position < _people.Length); } public void Reset() { position = -1; } public object Current { get { try { return _people[position]; }catch (IndexOutOfRangeException) { throw new InvalidOperationException(); } } }}//appclass App{ static void Main() { Person[] peopleArray = new Person[3] { new Person("John", "Smith"), new Person("Jim", "Johnson"), new Person("Sue", "Rabon"), }; People peopleList = new People(peopleArray); foreach (Person p in peopleList) Console.WriteLine(p.firstName + " " + p.lastName); }}/* This code produces output similar to the following: * * John Smith * Jim Johnson * Sue Rabon * */
上述就是小编为大家分享的如何实现IEnumerator接口分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
元素
分析
线程
接口
位置
过程
安全
内容
方法
C#
复杂
有效
专业
中小
之间
内容丰富
再次
基础
备注
复杂性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何根据数据库进行邮件群发
分布式数据库如何查询
公交车查询系统数据库课程设计
新闻获取方式数据库
ibm认证软件开发
静安区推广软件开发咨询热线
网络安全监督检查工作报告
数据库 异地备份
无锡有招软件开发的吗
华为服务器进入管理界面
软件开发经验文档格式
淘宝商品数据库2021
做网络安全服务器
科技互联网年历素材
怎么查一个镇的气象数据库
疫情环境下如何迎接网络安全治理
良鑫网络技术
sql数据库月份
java聊天服务器
汽车维修数据库哪个全
高中信息技术建立数据库教案
惠普sas服务器
沈阳有网络安全教育课程吗
数据库设置时间格式
怎么在网上找软件开发的工作
同望公路预算软件开发公司
服务器每秒200请求
青岛公安局网络安全管理待遇如何
软件开发者技能
安装数据库实例名