c# 迭代器

   c# 中实现了IEnumerable接口的类型为可迭代类型。即可利用foreach遍历的类型。

   可通过一下两种方式实现自定义的可迭代类型:

    1.      手动实现IEnumerator接口(实现其中的 Current属性, MoveNext方法, Reset方法);

              具体实现代码如下:

public class IterationSample : IEnumerable
    {
        public object[] Values;
        public int StartingPoint;

        public IterationSample(object[] values, int startingPoint)
        {
            this.Values = values;
            this.StartingPoint = startingPoint;
        }

        public IEnumerator GetEnumerator()
        {
            return new IterationSampleIterator(this);
        }
    }

    public class IterationSampleIterator : IEnumerator
    {
        private readonly IterationSample _parent;
        private int _position;

        internal IterationSampleIterator(IterationSample parent)
        {
            this._parent = parent;
            this._position = -1;
        }

        public object Current
        {
            get
            {
                if (_position == -1 || _position == _parent.Values.Length)
                {
                    throw new InvalidOperationException();
                }
                int index = _position + _parent.StartingPoint;
                index = index % _parent.Values.Length;
                return _parent.Values[index];
            }
        }

        public bool MoveNext()
        {
            if (_position != _parent.Values.Length)
            {
                _position++;
            }
            return _position < _parent.Values.Length;
        }

        public void Reset()
        {
            _position = -1;
        }
    }

 

2.     通过IEnumerator的等价代码——yield return 来实现可迭代类型。

        return 一般起到作用: 返回, 中断执行;

         yield return 并不是中断,而是暂停。在下一次调用yield迭代块的时候继续执行。

         具体代码实现如下:

    public class IterationSampleYield : IEnumerable
    {
        public object[] Values;
        public int StartingPoint;

        public IterationSampleYield(object[] values, int startingPoint)
        {
            this.Values = values;
            this.StartingPoint = startingPoint;
        }

        public IEnumerator GetEnumerator()
        {
            for (int index = 0; index < Values.Length; index++)
            {
                yield return Values[(index + StartingPoint) % Values.Length];
            }
        }
    }

期末大作业基于python的足球运动员数据分析源码+数据集(高分项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于pyth
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值