Pregunta

¿Es esta una mala idea?

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

Esta clase sólo es visible como un IEnumerable (Of T) Propiedad de sólo lectura, y me ahorra una clase adicional que envuelve IEnumerator (Of T). Pero de alguna manera que sólo parece mal. ¿Hay una mejor manera?

¿Fue útil?

Solución

Esta es una mala idea porque la solución se romperá si alguien intenta enumerar su colección más de una vez al mismo tiempo.

Por ejemplo: Esto romperá de alguna manera

For Each cur1 in yourObj 
  For Each cur2 in yourObj
    Console.WriteLine("{0} - {1}", cur1,cur2)
  Next
Next

Otros consejos

Sin duda una mala idea. En particular, esto significa que dos llamadas a GetEnumerator volverán referencias al mismo objeto. - cuando deberían volver independiente iteradores

Ahora, habiendo dicho esto, el compilador de C # generará clases que implementan ambos tipos si se utiliza bloques de iterador ... pero hace todo lo posible para asegurarse de que lo hace bien. Yo sugiero que no se pone a través de ese dolor:)

de aplicación IEnumerable :

  

proporcionan un método GetEnumerator () que devuelve un struct pública anidada llamado “enumerador”.

Por cierto, este sitio web es mantenido por Brad Abrams - uno de los autores de Marco de Diseño Directrices .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top