カタログがIEnumerableだけでなく、IQueryableを介して部品を公開するのはなぜですか。私はそれについて考えてきましたが、インタフェースが提供するIQueryableサービスをどのように実際に使用するのかを理解していません。MEFカタログでIEnumerableの代わりにIQueryableが使用されるのはなぜですか?
2
A
答えて
4
クエリごとにすべての利用可能な部分(O(N)操作)をスキャンする必要がない実装が可能になるためです。
var matches = catalog.Parts
.Where(part => part.ExportDefinitions.Any(
export => export.ContractName == "foo"));
IQueryProvider
のカタログの実装は、結果の式を認識できます、具体的な例を与えるMEFは、右契約に輸出を見つけるために、内部的に行い、何かのようになります。次のクエリを考慮することが
「foo」をキーとして「foo」を使って辞書から検索すると、実際にすべての部分を列挙して実行するのではなく、.Where
に渡されるラムダを実行しますIEnumerable
の場合と同様です。
編集:私の例は実際にはこの場合のために具体的にGetExportsメソッドが存在するため、実際には良いものではありません。そのようなParts
プロパティを照会する必要はありません。おそらく、より良い例はexport.Metadata
です。
関連する問題
- 1. Func <S、IQueryable <R>>の代わりにQueryable.SelectMany(...)オーバーロードでFunc <S、IEnumerable <R>>を使用するのはなぜですか?
- 2. なぜ使用されるビューの代わりに、SQL文
- 3. pybrain 0.3.1が0.3.3の代わりにインストールされるのはなぜですか?
- 4. なぜ* headの代わりに** headが使用されていますか?
- 5. JavaがUTF-8の代わりに変更されたUTF-8を使用するのはなぜですか?
- 6. RELEASEの代わりにNDEBUGを使用するのはなぜですか?
- 7. WireMockの代わりにMockWebServerを使用するのはなぜですか?
- 8. Symfonyプロキシの代わりにワニスを使用するのはなぜですか?
- 9. FragmentStatePagerAdapterの代わりにFragmentPagerAdapterを使用するのはなぜですか?
- 10. マルコフモデルの代わりにRNNを使用するのはなぜですか?
- 11. なぜ文中の他の場所でも値が使用されない場合、i ++の代わりに++ iを使用するのはなぜですか?
- 12. C#では、なぜStreamWriterの代わりにTextWriterを使用できますか?
- 13. なぜSQLBRITEで、代わりにSQLiteを使用するのですか?
- 14. リストの代わりにIEnumerableを使用すると、流暢なnhibernateが結果をキャッシュしないのです
- 15. なぜwindow.showModalDialogは推奨されていませんか?代わりに何を使用するのですか?
- 16. シングルの代わりにダブルクリックするのはなぜですか?
- 17. なぜincqの代わりにlealを使用するのですか?
- 18. WCF/Silverlight:なぜクライアントの代わりにChannelFactoryを使用するのですか?
- 19. なぜJavaの代わりにClojureを使用するのですか
- 20. なぜwindow.locationの代わりにルーティングを使用するのですか?
- 21. なぜjasmine.createSpyの代わりにspyOnを使用するのですか?
- 22. なぜRabbitMQの代わりにCeleryを使用するのですか?
- 23. なぜtf.stackの代わりにtf.concatを使用するのですか?
- 24. なぜzImageの代わりにuImageを使用するのですか?
- 25. catch(...)によってキャッチされる代わりに_CxxUnhandledExceptionFilterが呼び出されるのはなぜですか?
- 26. なぜAssembly.LoadFromの代わりにAssembly.LoadFileを使用しますか?
- 27. Scala:filterNotの代わりにremoveが使用されなくなりましたか?
- 28. JSONでhttp://の代わりにhttp:\/\ /を使用しているサイトがあるのはなぜですか?
- 29. ICPカタログにCAMが表示されないのはなぜですか?
- 30. イベントストア/ CQRSアーキテクチャでは、コマンドの代わりにイベントが格納されるのはなぜですか?
IQueryProviderの実装によって、実際には、そのような最適化が行われます。 –
@ジョン:MEF *が実際にこのようなことをしているのかどうかはわかりませんが、インターフェイスだけでそのような実装が可能です。 'ComposablePartCatalog'から派生して、独自のカタログを作成することができます。 –