Cómo y dónde usar enumeradores

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.

  1. Cells.GetEnumerator
  2. Fila.GetEnumerator
  3. Range.GetEnumerator

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.

  1. 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.
  2. 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.
  3. 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.

  1. Se requiere acceso de solo lectura de la colección de celdas, es decir; el requisito es solo inspeccionar las celdas.
  2. Se va a atravesar un gran número de celdas.
  3. Solo se recorrerán las celdas/filas/columnas inicializadas.