枚举器迭代集合

本文介绍了C#中如何使用枚举器进行集合迭代,重点讲解了IEnumerator接口和foreach语句的工作原理。通过yield语句简化枚举器的创建,并展示了迭代器在不同场景的应用,包括默认迭代、逆序迭代和子集迭代。此外,还阐述了如何在yield return语句中返回枚举器,用于模拟游戏移动等复杂操作。
摘要由CSDN通过智能技术生成

在foreach语句中使用枚举,可以迭代集合中的元素,且不需要知道集合中的元素个数。foreach语句使用了一个枚举器。

注:

GetEnumerator()方法用IEnumerable接口定义。foreach语句并不需要在集合类中实现这个接口。有一个名为GetEnumerator()的方法,它返回实现了IEnumerator接口的对象就够了。

IEnumerator接口

foreach语句使用IEnumerator接口的方法和属性,迭代集合中所有的元素。为此,IEnumerator定义了Current属性,来返回光标所在的元素,该接口的MoveNext()方法移动到集合的下一个元素上。如果有这个元素,该方法返回true。如果集合不再有更多的元素,该方法就返回false。

这个接口的泛型版本IEnumerator<T>派生自接口IDisposable,因此定义了Dispose()方法,来清理给枚举器分配的资源。

注:

IEnumerator接口还定义了Reset()方法,以与COM交互操作。许多.NET枚举器通过抛出NotSupportedException类型的异常,来实现这个方法。

foreach语句

C#的foreach语句不会解析为IL代码中的foreach语句。C#编译器会把foreach语句转换为IEnumerator的方法和属性。下面是一条简单的foreach语句,它迭代persons数组中的所有元素,并逐个显示它们:

                List<Person> persons = new List<Person> {
                new Person("Damon","Hill"),
                new Person("Niki","Lauda"),
                new Person("Ayrton","Senna"),
                new Person("Graham","Hill")
            };
            //foreach语句会解析为下面的代码段。首先,调用GetEnumerator()方法。获得数组的一个枚举器。在While循环中——只要MoveNext()返回true,
            //就用Current属性访问数组中的元素:
            IEnumerator<Person> enumerator = persons.GetEnumerator();
            while(enumerator.MoveNext()){
                Person person= enumerator.Current;
                System.Console.WriteLine(person);
            }

yield语句

自C#的第1个版本以来,使用foreach语句可以轻松地迭代集合。在C#1.0中,创建枚举器仍需要做大量的工作。C#2.0添加了yield语句,以便于创建枚举器。yield return语句返回集合的一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值