IEnumerable からアイテム数を取得
IEnumerable
private IEnumerable<string> Tables { get { yield return "Foo"; yield return "Bar"; } }
このコレクションを反復処理し、進行状況を「#m 中の #n を処理中」として表示したいとします。メインの反復の前に反復せずに m の値を決定する方法はありますか?
IEnumerable について
デフォルトでは、IEnumerable は、アイテム数。遅延評価の性質により、要素は必要な場合にのみ取得されることになります。この設計上の選択は、不必要なメモリ割り当てと処理を回避することでリソースの使用を最適化するために行われます。
代替解決策: ICollection を使用する
アイテム数をすぐに知る必要がある場合は、 IEnumerable の代わりに、ICollection
public class TableCollection : ICollection<string> { // Implementation details omitted for brevity public int Count => 2; }
Tables コレクションを ICollection
結論
一方、IEnumerable は、遅延評価の利点はありますが、アイテム数の取得を直接サポートしません。カウントにすぐにアクセスするには、ICollection またはこの機能を提供するより適切なデータ構造の使用を検討してください。
以上が反復せずに IEnumerable 内の項目数を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。