Come e dove utilizzare gli enumeratori

Come utilizzare gli enumeratori

Cells Enumeratore

Esistono vari modi per accedere all’enumeratore Cells ed è possibile utilizzare uno qualsiasi di questi metodi in base ai requisiti dell’applicazione. Ecco i metodi che restituiscono l’enumeratore di celle.

  1. Cells.GetEnumerator
  2. Row.GetEnumerator
  3. Range.GetEnumerator

Tutti i metodi sopra menzionati restituiscono l’enumeratore che consente di attraversare la raccolta di celle che sono state inizializzate.

Nell’esempio di codice seguente viene illustrata l’implementazione dell’interfaccia IEnumerator per una raccolta Cells.

Enumeratore di righe

È possibile accedere all’enumeratore di righe durante l’utilizzo diRowCollection.GetEnumerator metodo. Nell’esempio di codice seguente viene illustrata l’implementazione dell’interfaccia IEnumerator perRowCollection.

Enumeratore di colonne

È possibile accedere all’enumeratore di colonne durante l’utilizzo diColumnCollection.GetEnumerator metodo. Nell’esempio di codice seguente viene illustrata l’implementazione dell’interfaccia IEnumerator perColonnaCollezione.

Dove utilizzare gli enumeratori

Per discutere i vantaggi derivanti dall’utilizzo degli enumeratori, prendiamo un esempio in tempo reale.

Scenario

Un requisito dell’applicazione è attraversare tutte le celle in un datoFoglio di lavoroleggere i loro valori. Potrebbero esserci diversi modi per realizzare questo obiettivo. Alcuni sono dimostrati di seguito.

Utilizzo dell’intervallo di visualizzazione

Utilizzo di MaxDataRow e MaxDataColumn

Come puoi osservare, entrambi gli approcci sopra menzionati utilizzano una logica più o meno simile, cioè; eseguire il loop su tutte le celle della raccolta per leggere i valori delle celle. Ciò potrebbe essere problematico per una serie di motivi, come discusso di seguito.

  1. API comeMaxRow, MaxDataRow, Colonna massima, ColonnaDatiMax & Intervallo di visualizzazione massimorichiedono più tempo per raccogliere le statistiche corrispondenti. Nel caso in cui la matrice dei dati (righe x colonne) sia di grandi dimensioni, l’utilizzo di queste API potrebbe comportare una riduzione delle prestazioni.
  2. Nella maggior parte dei casi, non tutte le celle in un dato intervallo vengono istanziate. In tali situazioni controllare ogni cella della matrice non è così efficiente rispetto a controllare solo le celle inizializzate.
  3. L’accesso a una cella in un ciclo come riga Cells, colonna causerà la creazione di un’istanza di tutti gli oggetti cella in un intervallo, il che potrebbe eventualmente causare OutOfMemoryException.

Conclusione

Sulla base dei fatti sopra menzionati, di seguito sono riportati i possibili scenari in cui dovrebbero essere utilizzati gli enumeratori.

  1. È richiesto l’accesso in sola lettura alla raccolta di celle; il requisito è quello di ispezionare solo le celle.
  2. È necessario attraversare un gran numero di celle.
  3. Solo le celle/righe/colonne inizializzate da attraversare.