naw*_*fal 4 .net c# ienumerator enumerator design-guidelines
在集合的框架类中,我经常看到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
}
}
Run Code Online (Sandbox Code Playgroud)
我应该编写自己的枚举器类,还是可以返回List<T>类的枚举器?我是否应该编写自己的枚举类?
我也有一个相关的问题.如果它不是那么重要或没有太大的区别,为什么BCL中的每个集合类都写自己的IEnumerator?
例如,List<T>班级有类似的东西
T[] items;
public IEnumerator<T> GetEnumerator()
{
return new List<T>.Enumerator(items);
}
Run Code Online (Sandbox Code Playgroud)
您的第一个问题的答案是:当收益率回报不符合您的需求时.
第二个问题的答案是:这些使用频繁的类型具有非常严格的性能要求,因此枚举器是自定义构建的.我最近写了一些文章; 看到:
http://ericlippert.com/2014/05/21/enumerator-advance/
http://ericlippert.com/2014/06/04/enumerator-bounds/
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |