这是个坏主意吗?
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
此类仅作为IEnumerable(Of T)readonly属性可见,它为我节省了一个包装IEnumerator(Of T)的附加类。但不知何故,这似乎是错误的。还有更好的方法吗?
答案 0 :(得分:5)
绝对是个坏主意。特别是,这意味着对GetEnumerator
的两次调用将返回对同一对象的引用 - 当它们应该返回独立的迭代器时。
现在已经说过了,如果使用迭代器块,C#编译器将生成实现这两种类型的类......但是它确实能够确保它正确。我建议你不要让自己忍受这种痛苦:)
答案 1 :(得分:4)
这是一个糟糕的主意,因为如果有人尝试同时枚举您的集合,解决方案将会中断。
例如:这会以某种方式破坏
For Each cur1 in yourObj
For Each cur2 in yourObj
Console.WriteLine("{0} - {1}", cur1,cur2)
Next
Next
答案 2 :(得分:1)
提供GetEnumerator()方法,返回名为“Enumerator”的 嵌套公共结构 。
顺便说一下,这个网站由Brad Abrams维护 - 他是Framework Design Guidelines的作者之一。