赞
踩
foreach (var item in hand)
{遍历
item.Fly();
}
对象具有迭代器对象(GetEnumerator方法)
或,对象实现IEnumerable接口
原理:iterator 迭代器对象
意图:访问聚合对象内容而不暴露其内部结构。
提供简单明了的获取集合类型对象的方式。
IEnumerator iterator=hand.GetEnumerator();//创建迭代器对象
//理解为:索引增加 如果返回true表示有元素
while(iterator.MoveNext())// -1 //2.移动到下一个元素
{ //理解为:获取当前索引的元素
IThrowablet = iterator.Current as IThrowable;获取当前元素
t.Fly();
}
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; }
}
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];//暂时退出
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。