Come e dove utilizzare gli enumeratori
Un enumeratore è un oggetto che offre la possibilità di attraversare un contenitore o una raccolta. Gli enumeratori possono essere utilizzati per leggere i dati nella raccolta, ma non possono essere utilizzati per modificare la raccolta sottostante, mentre IEnumerable è un’interfaccia che definisce un metodo GetEnumerator che restituisce un’interfaccia IEnumerator, questa, a sua volta, consente l’accesso in sola lettura a una collezione.
Aspose.Cells Le API forniscono una serie di enumeratori, tuttavia questo articolo discute principalmente i tre tipi elencati di seguito.
- Cells Enumeratore
- Enumeratore di righe
- Enumeratore di colonne
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.
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.
- 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.
- 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.
- 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.
- È richiesto l’accesso in sola lettura alla raccolta di celle; il requisito è quello di ispezionare solo le celle.
- È necessario attraversare un gran numero di celle.
- Solo le celle/righe/colonne inizializzate da attraversare.