在集合的框架类中,我经常看到IEnumerator<T>
单独实现为内部类,并在GetEnumerator
方法中返回它的实例。
现在假设我正在编写自己的集合类,它将有一个内置的集合,例如List<T>
或T[]
在内部充当持有者,像这样说:
public class SpecialCollection<T> : IEnumerable<T>
{
List<T> list;
public SpecialCollection<T>()
{
}
public IEnumerator<T> GetEnumerator()
{
return list.GetEnumerator();
//or
return list.Where(x => some logic).GetEnumerator();
//or directly rely on yield keyword
yield return x; //etc
}
}
我应该编写自己的枚举器类,还是可以返回List<T>
该类的枚举器?在什么情况下我应该编写自己的枚举器类?
我也有一个相关的问题。如果它不是那么重要或没有太大区别,为什么 BCL 中的每个集合类都编写自己的IEnumerator
?
例如,List<T>
类有类似的东西
T[] items;
public IEnumerator<T> GetEnumerator()
{
return new List<T>.Enumerator(items);
}