誰かがLINQ関数のWhere(..)とFindAll(..)の違いを説明できますか?彼らは両方とも同じことをしているようです...
誰かがLINQ関数のWhere(..)とFindAll(..)の違いを説明できますか?彼らは両方とも同じことをしているようです...
回答:
FindAll()はList<T>型の関数であり、のようなLINQ拡張メソッドではありませんWhere。LINQの拡張メソッドは、任意のタイプその実装に取り組むIEnumerable一方、FindAllのみで使用することができList<T>インスタンス(またはクラスのインスタンスその継承もちろん、それから)。
また、実際の目的も異なります。オブジェクトが列挙されたときにオンデマンドで実行されるWhereインスタンスを返しますIEnumerable。要求された要素を含むFindAll新しいList<T>を返します。FindAllのWhere(...).ToList()インスタンスを呼び出すようなものですIEnumerable。
私との最大の違いは、.FindAllが.Net 2.0でも利用できることです。私は常に.Net 3.5でプログラムする贅沢があるわけではないので、.Netジェネリックコレクションの「ネイティブ」メソッドを思い出そうとします。
LINQを実行できなかったため、既に利用可能なListメソッドを自分で実装したことが何度かありました。
この場合に便利だと思うのは、VS2008 を使用すると、型推論とラムダ構文を使用できることです。これらはコンパイラー機能であり、フレームワーク機能ではありません。これは私がこれを書くことができ、それでも.Net 2.0内にとどまることを意味します:
var myOddNums = myNums.FindAll(n => n%2==1);ただし、LINQを使用できる場合は、遅延実行と即時実行の違いを維持することが重要です。
80Kのオブジェクトのリストでいくつかのテストを行ったところFind()、Wherewith を使用するよりも最大1000%速くなることがわかりましたFirstOrDefault()。各呼び出しの前後にタイマーをテストするまで、私はそれを知りませんでした。時々それは同じ時間でした、他の時はより速くなりました。