私の質問はそれをすべて言っていると思います。に存在するのにFindメソッドが存在しないEnumerable<>
理由List<>
。それらがそこにあれば、LINQ
から何かを見つけるために大きなクエリを書く負担が減ったでしょうEnumerable<>
。を使用してEnumerableをListに変更できることは知っています.ToList()
が、それはハックになります。
2 に答える
Enumerable.FirstOrDefault <TSource>拡張メソッドは、 List<T>.Findメソッドとまったく同じように機能します。
Enumerable.FirstOrDefault<TSource>メソッド
条件を満たすシーケンスの最初の要素、またはそのような要素が見つからない場合はデフォルト値を返します。
戻り値:ソースが空の場合、または述語で指定されたテストに合格する要素がない場合は、default(TSource)。それ以外の場合は、述語で指定されたテストに合格するソースの最初の要素。
List<T>.Findメソッド
指定された述語によって定義された条件に一致する要素を検索し、List<T>全体の中で最初に出現したものを返します。
戻り値:指定された述語によって定義された条件に一致する最初の要素(見つかった場合)。それ以外の場合、タイプTのデフォルト値。
クラスにインターフェースよりも多くの「ヘルパー関数」を含めることは非常に一般的です。ヘルパー関数をクラスに追加するには、ヘルパーを追加しながら、そのメソッドのコードを 1 つの場所 (問題のクラス) にコードを追加する必要があるという単純な理由からです。関数をインターフェイスに追加すると、そのインターフェイスのすべての実装で、その関数のコードを追加する必要があります。
CLR の次のバージョンが、インターフェイスがメンバーの既定の実装を指定できる手段を提供できると便利です。特に、インターフェイスの古いバージョンの実装が、新しいバージョンの既定の実装を使用して、新しいバージョンを実装していると見なすことができる場合に役立ちます。メンバー。そのようなことが合法である場合IEnumerable<T>
、メソッドを追加Count
できます。これは、アイテムを反復することなくアイテムの数を決定できた実装によってオーバーライドできますが、それ以外の場合は、反復によってカウントされるデフォルトのメソッドを使用します。Find
そのような機能が存在する場合、好きなメンバーを追加IEnumerable<T>
すると便利です。残念ながら、そのような機能を実装する計画はありません。