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