C#-迭代器/枚举器,索引器
1.迭代器:可使用Foreach遍历,如List,Dictionary等,其继承IEnumerable接口,并实现public IEnumerator GetEnumerator()方法;
举例:有个动物园,其中有各种动物:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Zoo : IEnumerable { List<Animal> animals; public Zoo() { animals = new List<Animal>(); } public void Add(Animal ani) { animals.Add(ani); } public IEnumerator GetEnumerator() //返回迭代器 { foreach ( var v in animals) yield return v; } } |
或这种实现方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | public class Zoo : IEnumerable { Enumerator enumer; List<Animal> animals; public Zoo() { animals = new List<Animal>(); enumer = new Enumerator( this ); } public void Add(Animal ani) { animals.Add(ani); } public IEnumerator GetEnumerator() //返回迭代器 { return enumer; } public class Enumerator : IEnumerator { Zoo zoo; int index; public Enumerator(Zoo z) { zoo = z; index = -1; } public object Current { get { return zoo.animals[index]; } } public bool MoveNext() { return ++index < zoo.animals.Count; } public void Reset() { index = -1; } } } |
2.索引器,可以直接指定[Index]对对象中的元素进行读取或赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public Animal this [ int index] //索引器 { get { if (animals.Count > index) return animals[index]; return null ; } set { if (animals.Count > index) animals[index] = value; } } |
使用迭代器和索引器:
1 2 3 4 5 6 7 8 9 | Zoo zoo = new Zoo(); zoo.Add( new Animal( "Cat" )); zoo.Add( new Animal( "Dog" )); zoo.Add( new Animal( "Pig" )); zoo.Add( new Animal( "Duck" )); zoo[2] = new Animal( "Cattle" ); Console.WriteLine(zoo[3].name); //索引器,可指定Index进行赋值或读值 foreach (Animal v in zoo) Console.WriteLine(v.name); //迭代器,使用Foreach进行遍历 |
运行结果
分类:
日常随笔
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具