d
と指定すると、リストや配列などの固定されたシーケンス、いくつかの外部データソースを列挙するAST、または既存のコレクションのASTさえ扱うことができます。 foreach、countなどの列挙操作で毎回ASTが実行されないように、列挙可能体を安全に「実現」する方法はありますか?IEnumerableを暗記またはマテリアライズする方法はありますか?
私はこの表現を作成するのに多くの場合.ToArray()
を使用しましたが、基本ストレージがすでにリストやその他の固定シーケンスである場合は、無駄なコピーと思われます。私は.Any()
とforeach
は二回、それがunccessarily列挙をコピーせずにシーケンスを列挙しようとすることを心配することなく
var enumerable = someEnumerable.Materialize();
if(enumberable.Any() {
foreach(var item in enumerable) {
...
}
} else {
...
}
を行うことができればいいだろう。
これはいいアイデアですが、既存のコレクションへの変異から保護するために、しばしばexistingCollection.ToListが行われることを指摘します。 – Ani
.ToList()の問題は、リスト(配列、ICollectionsなど)ではなく、変更可能なコレクションを返す列挙型のリストを作成することです。 –