IEnumerable和IEnumerator的在同一个班级,好主意?
-
22-09-2019 - |
题
这是一个坏主意?
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)已只读属性可见,并将其保存箱,它包装的IEnumerator(OF T)一个附加的类。但不知何故,它只是似乎是错误的。有没有更好的办法?
解决方案
这是一个坏主意,因为该解决方案将打破,如果有人试图枚举您的收藏不止一次在同一时间。
例如:这将在某种程度上
破For Each cur1 in yourObj
For Each cur2 in yourObj
Console.WriteLine("{0} - {1}", cur1,cur2)
Next
Next
其他提示
绝对是一个好主意。特别是,它意味着两次调用GetEnumerator
将回到同一个对象的引用 - 当他们回来的独立的迭代器
现在话说回来,C#编译器会生成如果使用迭代器块实现这两种类型的类...但它竭尽全力,以确保它得到它的权利。我建议你不要把自己通过这种痛苦:)
确实提供了的GetEnumerator()方法,它返回一个的 嵌套公共结构 强>称为“枚举”。
顺便说一句,这个网站是由布拉德·艾布拉姆斯维持 - 的框架设计指南。的
不隶属于 StackOverflow