迭代器就像指針一樣可以向前向後移動
動機
意圖
/// <summary>
/// 可迭代接口
/// </summary>
public interface IEnumerable
{
//得到迭代器
IEnumerator GetEnumerator();
}
/// <summary>
/// 迭代器接口
/// </summary>
public interface IEnumerator
{
//得到當前的對象
object Current
{
get;
}
bool MoveNext();
void Reset();
}
/// <summary>
/// 集合類型
/// </summary>
public class MyCollection : IEnumerable
{
internal int[] items;
public MyCollection()
{
items = new int[
}
#region IEnumerable 成員
//實現迭代接口
public IEnumerator GetEnumerator()
{
//在這裡進行解藕
return new MyEnumerator(this);
}
#endregion
}
//迭代器對象
internal class MyEnumerator : IEnumerator
{
private int nIndex;
MyCollection collection;
//構造函數將集合類型轉換成內部成員
public MyEnumerator(MyCollection coll)
{
llection = coll;
nIndex =
}
#region IEnumerator 成員
//返回當前迭代到的對象
public object Current
{
get
{
return ems[nIndex];
}
}
//移動到下一個對象
public bool MoveNext()
{
nIndex++;
return (nIndex < ems
}
//重設迭代器
public void Reset()
{
nIndex =
}
#endregion
}
很清楚
/// 集合類型
/// </summary>
public class MyCollection : IEnumerable<int>
{
internal int[] items;
public MyCollection()
{
items = new int[
}
#region IEnumerable<int> 成員
public IEnumerator<int> GetEnumerator()
{
for(int i =
{
yield return items[i];
}
}
#endregion
#region IEnumerable 成員
System
{
for(int i =
{
yield return items[i];
}
}
#endregion
}
我們通過yield return關鍵字來返回一個IEnumerator接口
中迭代器只能先前
注意
From:http://tw.wingwit.com/Article/program/net/201311/11575.html