6

这是一个坏主意吗?

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) 的附加类。但不知何故,这似乎是错误的。有没有更好的办法?

4

3 回答 3

7

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

话虽如此,如果您使用迭代器块,C# 编译器将生成实现这两种类型的类......但它会竭尽全力确保它正确无误。我建议你不要让自己经历那种痛苦:)

于 2010-03-25T20:40:11.620 回答
5

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

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

For Each cur1 in yourObj 
  For Each cur2 in yourObj
    Console.WriteLine("{0} - {1}", cur1,cur2)
  Next
Next
于 2010-03-25T20:40:25.070 回答
1

实现 IEnumerable

请提供一个 GetEnumerator() 方法,该方法返回一个名为“Enumerator”的嵌套公共结构。

顺便说一句,该网站由框架设计指南的作者之一布拉德艾布拉姆斯维护。

于 2010-03-25T20:41:32.213 回答