Iterator迭代器原理

引入

foreach (var item in hand)

{遍历

   item.Fly();

}

常见面试题:可以foreach的条件

对象具有迭代器对象(GetEnumerator方法)

或,对象实现IEnumerable接口

扫描二维码关注公众号,回复: 1890324 查看本文章

迭代器原理与意图

原理:iterator 迭代器对象

意图:访问聚合对象内容而不暴露其内部结构。

      提供简单明了的获取集合类型对象的方式。

迭代器实现

调用实现

IEnumerator iterator=hand.GetEnumerator();//创建迭代器对象

//理解为:索引增加  如果返回true表示有元素

while(iterator.MoveNext())// -1    //2.移动到下一个元素

{ //理解为:获取当前索引的元素

IThrowablet = iterator.Current as IThrowable;获取当前元素

t.Fly();

}

迭代器01

1.创建迭代器对象

public IEnumerator GetEnumerator()

{//创建迭代器对象

return new HandEnumerator() {Target = AllObject };

}

2.自定义迭代器对象

    //自定义迭代器对象:负责提供一种顺序访问集合类型对象元素的方法。

    public class HandEnumerator:IEnumerator

    {   public IThrowable[] Target{ get; set; }

        private int index = -1;

        public object Current

        { get             {

               return Target[index];            }        }

        public bool MoveNext()

        {

            //索引增加

            index++;

            //true 没有越界       false 越界

            return index <=Target.Length - 1;

        }

        public void Reset()

        {   index = -1;        }

    }

迭代器02

1.利用yeld return 来实现

public IEnumerator GetEnumerator()

{

//1.第一次调用MoveNext方法开始执行方法体

//2.执行到yieldreturn处,暂时退出

//3.再次调用MoveNext方法,从yield return处继续执行。

//循环到2步……

//yieldreturn 将自动创建迭代器对象

for (int i = 0; i <AllObject.Length; i++)

            {

                yield return AllObject[i];//暂时退出

            }

        }

猜你喜欢

转载自blog.csdn.net/qq_25601345/article/details/77777006