Iterator迭代器原理

 

引入

 

foreach (var item in hand)

{遍历

   item.Fly();

}

 

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

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

或,对象实现IEnumerable接口

 

 

迭代器原理与意图

 

原理: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

            {

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

            }

        }

 

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部