IEnumerable を使用する場合の基本原則は、要素が必要なときにのみ取得される遅延評価です。ただし、場合によっては、コレクション内のアイテムの数を反復処理せずに知る必要がある状況に陥ることがあります。
次のコード スニペットを考えてみましょう。
private IEnumerable<string> Tables { get { yield return "Foo"; yield return "Bar"; } }
If weこのコレクションを反復処理し、進行状況を「#m中#nを処理中」として表示したいのですが、何もせずにmの値を決定するにはどうすればよいですか? iterating?
IEnumerable の制限
残念ながら、これは IEnumerable では不可能です。設計上、これは遅延して動作し、要求された場合にのみ要素を生成します。合計カウントを事前に決定するには事前のトラバーサルが必要となり、遅延評価の目的が無効になります。
ICollection to the Rescue
反復せずにカウントを知ることが重要な場合は、次のことを考慮してください。代わりに ICollection を使用します。 ICollection は、コレクションの内容に関する情報を提供できるコレクションを表すインターフェイスです。これには、コレクション内の要素の数を返す Count プロパティが含まれています。
private ICollection<string> Tables { get { return new List<string> { "Foo", "Bar" }; } } int count = Tables.Count;
Table を List
結論として、IEnumerable は遅延評価の効率性で優れていますが、事前にカウント情報が欠如していることが制限となる可能性があります。事前にカウントを把握することが不可欠なシナリオでは、代わりに ICollection の使用を検討してください。
以上がIEnumerable を反復せずにカウントを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。