可以在IEnumerator.GetEnumerator()中返回IEnumerator <T> .GetEnumerator()吗?

Joa*_*nge 6 .net c# ienumerable

基本上假设你有一些收藏:

public class FurCollection : IEnumerable<FurStrand>
{
   public IEnumerator<FurStrand> GetEnumerator()
   {
      foreach(var strand in this.Strands)
      {
         yield return strand;
      }
   }

   IEnumerator IEnumerable.GetEnumerator()
   {
      return this.GetEnumerator();
   }
}
Run Code Online (Sandbox Code Playgroud)

这可以接受吗?或者这是容易出错还是不好的做法?我几乎总是使用IEnumerator<T>但我仍然希望非通用版本稳定并正确实现.

jas*_*son 10

这是完全标准的,建议遵守DRY和其他问题.

注意

return strand;
Run Code Online (Sandbox Code Playgroud)

应该

yield return strand;
Run Code Online (Sandbox Code Playgroud)

此外,它看起来像this.Strands已经实现,IEnumerable<FurStrand>所以你可以说

return this.Strands.GetEnumerator();
Run Code Online (Sandbox Code Playgroud)


Mar*_*k H 5

不,这是完全可以接受的.推荐均匀.