Cómo y dónde usar enumeradores
Un enumerador es un objeto que proporciona la capacidad de recorrer un contenedor o una colección. Los enumeradores se pueden usar para leer los datos en la colección, pero no se pueden usar para modificar la colección subyacente, mientras que IEnumerable es una interfaz que define un método GetEnumerator que devuelve una interfaz IEnumerator, esto, a su vez, permite el acceso de solo lectura a Una colección.
Las API Aspose.Cells proporcionan una serie de enumeradores; sin embargo, este artículo analiza principalmente los tres tipos que se enumeran a continuación.
- Cells enumerador
- Enumerador de filas
- Enumerador de columnas
Cómo usar enumeradores
Cells enumerador
Hay varias formas de acceder al Enumerador Cells, y uno puede usar cualquiera de estos métodos según los requisitos de la aplicación. Estos son los métodos que devuelven el enumerador de celdas.
Todos los métodos mencionados anteriormente devuelven el enumerador que permite recorrer la colección de celdas que se han inicializado.
El siguiente ejemplo de código muestra la implementación de la interfaz IEnumerator para una colección Cells.
Enumerador de filas
Se puede acceder al enumerador de filas mientras se usa elRowCollection.GetEnumerator método. El siguiente ejemplo de código demuestra la implementación de la interfaz IEnumerator paraRowCollection.
Enumerador de columnas
Se puede acceder al enumerador de columnas mientras se usa elColumnCollection.GetEnumeratorColumnCollection.GetEnumerator método. El siguiente ejemplo de código demuestra la implementación de la interfaz IEnumerator paraColumnCollection.
Dónde usar enumeradores
Para discutir las ventajas de usar enumeradores, tomemos un ejemplo en tiempo real.
Guión
Un requisito de la aplicación es recorrer todas las celdas en un determinadoHoja de cálculopara leer sus valores. Podría haber varias formas de implementar este objetivo. Algunos se muestran a continuación.
Uso del rango de visualización
Uso de MaxDataRow y MaxDataColumn
Como puede observar, los dos enfoques mencionados anteriormente utilizan una lógica más o menos similar, es decir; recorra todas las celdas de la colección para leer los valores de las celdas. Esto podría ser problemático por varias razones, como se analiza a continuación.
- API comoMaxRow, MaxDataRow, MaxColumna, MaxDataColumn & MaxDisplayRangerequieren tiempo adicional para recopilar las estadísticas correspondientes. En caso de que la matriz de datos (filas x columnas) sea grande, el uso de estas API podría imponer una penalización en el rendimiento.
- En la mayoría de los casos, no se instancian todas las celdas en un rango dado. En tales situaciones, verificar cada celda de la matriz no es tan eficiente en comparación con verificar solo las celdas inicializadas.
- Acceder a una celda en un bucle como Cells fila, columna hará que se creen instancias de todos los objetos de celda en un rango, lo que eventualmente puede causar OutOfMemoryException.
Conclusión
Sobre la base de los hechos mencionados anteriormente, los siguientes son los posibles escenarios en los que se deben utilizar enumeradores.
- Se requiere acceso de solo lectura de la colección de celdas, es decir; el requisito es solo inspeccionar las celdas.
- Se va a atravesar un gran número de celdas.
- Solo se recorrerán las celdas/filas/columnas inicializadas.