IEnumerable和IEnumerator在同一个类中,不好主意?

Dav*_*ten 5 c# ienumerable ienumerator

这是一个坏主意吗?

Private Class GH_DataStructureEnumerator(Of Q As Types.IGH_Goo)
  Implements IEnumerable(Of Q)
  Implements IEnumerator(Of Q)
  ....
  ....
  'Current, MoveNext, Reset etc.'
  ....
  ....

  Public Function GetEnumerator_Generic() As IEnumerator(Of Q) _
                  Implements IEnumerable(Of Q).GetEnumerator
    Return Me
  End Function
End Class
Run Code Online (Sandbox Code Playgroud)

此类仅作为IEnumerable(Of T)readonly属性可见,它为我节省了一个包装IEnumerator(Of T)的附加类.但不知何故,这似乎是错误的.有没有更好的办法?

Jon*_*eet 5

绝对是个坏主意.特别是,它意味着两次调用GetEnumerator将返回对同一对象的引用 - 当它们应该返回独立的迭代器时.

现在已经说过了,如果你使用迭代器块,C#编译器将生成实现这两种类型的类......但是它会花很多时间来确保它正确.我建议你不要让自己忍受痛苦:)


Jar*_*Par 5

这是一个坏主意,因为如果有人试图同时枚举您的集合不止一次,解决方案就会崩溃。

例如:这会以某种方式中断

For Each cur1 in yourObj 
  For Each cur2 in yourObj
    Console.WriteLine("{0} - {1}", cur1,cur2)
  Next
Next
Run Code Online (Sandbox Code Playgroud)

  • 或者甚至不是同时,很可能:) (2认同)