Me gustaría crear una copia de IEnumerator<T>
para que pueda reiniciar el proceso de enumeración desde una ubicación particular en la colección. Claramente, no hay beneficio en hacerlo para colecciones que implementan IList
, ya que podemos recordar el índice de interés.¿Es posible clonar una instancia de IEnumerable <T>, guardando una copia del estado de iteración?
¿Existe alguna forma inteligente de realizar esta tarea utilizando una combinación de instrucciones yield
y funciones de Linq? No pude encontrar un método Clone()
adecuado para copiar el enumerador, y me gustaría evitar el uso de Enumerable.Skip()
para reposicionar un nuevo enumerador en el punto de reanudación deseado.
Además, me gustaría mantener las soluciones lo más genéricas posible, y no tener que depender del estado de ninguna colección concreta.
¿Puede dar más detalles sobre lo que quiere lograr con ¿la implementación? – GrayWizardx
Esta es solo una idea que encontré el otro día. Si esto fuera posible, permitiría que un enumerador se utilizara como un puntero (que solo se puede incrementar), y podría permitir implementaciones inteligentes de búsqueda binaria en colecciones no indexables. –
Hace tiempo que lo pienso y me doy cuenta de que, sin acceso a los elementos de la colección, o una forma de indexarlos, no hay forma de hacerlo, a menos que sea aceptable volver a explorar la colección. Usar la serialización binaria para clonar el iterador es una opción, pero eso abre otra lata de gusanos todos juntos. –