Find() と Where().FirstOrDefault() の比較 質問する

Find() と Where().FirstOrDefault() の比較 質問する

Where.FirstOrDefault()検索を実行して最初の要素を取得するために を使用している人を頻繁に見かけます。 を単に使用しないのはなぜですかFind()? 他に利点はありますか? 違いはわかりませんでした。

namespace LinqFindVsWhere
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>();
            list.AddRange(new string[]
            {
                "item1",
                "item2",
                "item3",
                "item4"
            });

            string item2 = list.Find(x => x == "item2");
            Console.WriteLine(item2 == null ? "not found" : "found");
            string item3 = list.Where(x => x == "item3").FirstOrDefault();
            Console.WriteLine(item3 == null ? "not found" : "found");
            Console.ReadKey();
        }
    }
}

ベストアンサー1

Find方法はどこにありますかIEnumerable<T>? (修辞的な質問です。)

およびメソッドWhereは、、、などFirstOrDefaultを含む複数の種類のシーケンスに適用できます。を実装するシーケンスはすべてこれらのメソッドを使用できます。は に対してのみ使用できます。一般的に適用可能なメソッドは、よりList<T>T[]Collection<T>IEnumerable<T>FindList<T>再利用可能そしてより大きな影響力を持つようになります。

次に疑問に思うのは、そもそもなぜ find を追加したのかということです。これは良いヒントです。私が考えられる唯一のことは、FirstOrDefault が null 以外のデフォルト値を返すことができるということです。そうでなければ、無意味な追加に思えます。

Findon はList<T>他のメソッドより前に作成されました。List<T>は .NET 2.0 でジェネリックとともに追加され、Findそのクラスの API の一部でした。Whereおよびは、.NET のより新しいバージョンである LinqFirstOrDefaultで拡張メソッドとして追加されましたIEnumerable<T>。Linq が 2.0 リリースに存在していたらFind追加されなかったと断言することはできませんが、以前の .NET バージョンに含まれていたが、それ以降のバージョンでは廃止または不要になった他の多くの機能については、おそらくそうでしょう。

おすすめ記事