1、使一個(gè)類“可枚舉”,允許它支持foreach結(jié)構(gòu)
實(shí)現(xiàn)IEnumerable接口,并提供一個(gè)GetEnumerator方法來返回一個(gè)IEnumerator對象。如:
public class Tree<TItem>:IEnumerable<TItem>
{
...
IEnumerator<TItem> GetEnumerator()
{
...
}
}

2、在不用迭代器的前提下實(shí)現(xiàn)一個(gè)枚舉器
定義一個(gè)枚舉器類,它應(yīng)該實(shí)現(xiàn)IEnumerator接口,并在接口中提供Current屬性和MoveNext(并可選擇提供Reset)方法。如:
public class TreeEnumerator<TItem>:IEnumerator<T>
{
...
TItem Current
{
  get
  {
  ...
   }
}

bool MoveNext()
{
  ...
}
}

3、用迭代器來實(shí)現(xiàn)一個(gè)枚舉器
使用yield語句來實(shí)現(xiàn)枚舉器。yield指定了要返回的數(shù)據(jù)項(xiàng)以及以什么順序返回。如:
IEnumerator<TItem> GetEnumerator()
{
  for(...)
   yield return ...
}