基本上假设你有一些收藏:
public class FurCollection : IEnumerable<FurStrand>
{
public IEnumerator<FurStrand> GetEnumerator()
{
foreach(var strand in this.Strands)
{
yield return strand;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
这可以接受吗?或者这是容易出错还是不好的做法?我几乎总是使用IEnumerator<T
&gt;但我仍然希望非通用版本稳定并正确实施。
答案 0 :(得分:10)
这是完全标准的,建议遵守DRY和其他问题。
请注意
return strand;
应该是
yield return strand;
此外,看起来this.Strands
已经实现了IEnumerable<FurStrand>
,所以你可以说
return this.Strands.GetEnumerator();
答案 1 :(得分:5)
不,这是完全可以接受的。推荐均匀。
答案 2 :(得分:4)
这不仅是一种良好的做法,而且如果没有它,您的项目将无法实现,因为IEnumerable<T>
继承了IEnumerable
。查看IEnumerable<T>
:
public interface IEnumerable<out T> : IEnumerable
IEnumerator<T> GetEnumerator();
}
您必须实现非通用版本,否则您将收到错误“...未实现接口成员...”