私が使用しているCacheラッパークラスがあります。これは、型の安全性やセグメント化などの優れた機能を提供します。
マテリアライズされていないLINQクエリをキャッシュし、リスト/コレクションのみを受け入れることで、自分の足を撃たないようにしたいです...
IEnumerableがLINQクエリであるかどうかを検出する方法はありますか?
たぶん私は自分の質問に答えているので、TがIEnumerableであるが、ICollectionではない場合に例外をスローする必要があります。
IEnumerable<T>
自分のコレクション内をラップして、自分で「具体化」することをお勧めします。
これにより、完全な安全性と一貫性が提供されますが、別のコレクションインスタンスが生成され、参照がコピーされる可能性があります。
いつでもチェックを実行してICollection<T>
再生成しないなどの方法を実行できますが、コンテンツを独自のリストにコピーすることには利点があります。主なものの1つは、コレクションの唯一のインスタンスを制御することです。別のオブジェクトがアイテムを追加または削除することを心配する必要はありません(これは問題になる場合とそうでない場合がありますが、セグメント化には問題がある可能性があります)。