C# 经典实例 第二章 集合、枚举器和迭代器 #2.7 创建自定义枚举器

本文介绍了如何在C#中创建自定义迭代器,以支持foreach循环的不同行为,如正向、反向遍历以及按步长跳跃。通过示例展示了Container类的内部实现,包括GetEnumerator、GetReverseOrderEnumerator、GetForwardStepEnumerator和GetReverseStepEnumerator四个迭代器方法,详细阐述了迭代器的工作原理和foreach循环在其中的角色。同时,警告了在lock语句中使用yield可能引发的死锁问题。
摘要由CSDN通过智能技术生成

问题:

你需要向一个类中添加foreach支持,但是通常永固添加迭代器的方式(即在类型上实现IEnumerable并从一个成员函数返回执行这个IEnumerable的引用)并不足够灵活。除了简单的从第一个元素迭代到最后一个元素之外,还需要从最后一个元素迭代到第一个元素,并且需要能够在每次迭代时跨越或跳过预定义数量的元素。你想使所有这些类型的迭代器可供你的类使用。

解决方案:

例2-4中所示的Container<T>类充当一个名为internalList的私有List<T>的容器。我们实现了Container,因此可以在foreach循环中使用它来遍历私有internalList。

例2-4:创建自定义迭代器


        public class Container<T> : IEnumerable<T>
        {
            public Container() { }

            private List<T> _internalList = new List<T>();

            // This iterator iterates over each element from first to last
            public IEnumerator<T> GetEnumerator() => _internalList.GetEnumerator();

            // This iterator iterates over each element from last to first
            public IEnumerable<T> GetReverseOrderEnumerator()
            {
                forea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值