列挙子を使用する方法と場所
列挙子は、コンテナーまたはコレクションを走査する機能を提供するオブジェクトです。列挙子は、コレクション内のデータを読み取るために使用できますが、基になるコレクションを変更するために使用することはできません。一方、IEnumerable は、IEnumerator インターフェイスを返す 1 つのメソッド GetEnumerator を定義するインターフェイスであり、これにより、次への読み取り専用アクセスが許可されます。コレクション。
Aspose.Cells API は多数の列挙子を提供しますが、この記事では主に以下に示す 3 つのタイプについて説明します。
- Cells 列挙子
- 行列挙子
- 列列挙子
列挙子の使用方法
Cells 列挙子
Cells 列挙子にアクセスするにはさまざまな方法があり、アプリケーションの要件に基づいてこれらの方法のいずれかを使用できます。セル列挙子を返すメソッドは次のとおりです。
上記のすべてのメソッドは、初期化されたセルのコレクションをトラバースできる列挙子を返します。
次のコード例は、Cells コレクションの IEnumerator インターフェイスの実装を示しています。
行列挙子
Rows Enumerator は、RowCollection.GetEnumerator方法。次のコード例は、IEnumerator インターフェイスの実装を示しています。行コレクション.
列列挙子
Columns Enumerator は、ColumnCollection.GetEnumerator方法。次のコード例は、IEnumerator インターフェイスの実装を示しています。列コレクション.
列挙子を使用する場所
列挙子を使用する利点を説明するために、リアルタイムの例を見てみましょう。
シナリオ
アプリケーション要件は、特定のセル内のすべてのセルをトラバースすることです。ワークシートそれらの値を読み取ります。この目標を実現するには、いくつかの方法があります。いくつかを以下に示します。
表示範囲の使用
MaxDataRow と MaxDataColumn の使用
上記のアプローチの両方が多かれ少なかれ同様のロジックを使用していることがわかります。コレクション内のすべてのセルをループして、セルの値を読み取ります。これは、以下で説明するように、いくつかの理由で問題になる可能性があります。
- などの API最大行, MaxDataRow, 最大列, MaxDataColumn & MaxDisplayRange対応する統計を収集するために余分な時間が必要です。データ マトリックス (行 x 列) が大きい場合、これらの API を使用すると、パフォーマンスが低下する可能性があります。
- ほとんどの場合、特定の範囲内のすべてのセルがインスタンス化されるわけではありません。このような状況では、マトリックス内のすべてのセルをチェックすることは、初期化されたセルのみをチェックする場合に比べて効率的ではありません。
- Cells 行、列としてループ内のセルにアクセスすると、範囲内のすべてのセル オブジェクトがインスタンス化され、最終的に OutOfMemoryException が発生する可能性があります。
結論
上記の事実に基づいて、列挙子を使用する必要があるシナリオを次に示します。
- セル コレクションへの読み取り専用アクセスが必要です。要件は、セルのみを検査することです。
- 多数のセルをトラバースする必要があります。
- 初期化されたセル/行/列のみが走査されます。