[解決済み] Find() vs. 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();
}
}
}
解決方法は?
はどこですか?
Find
メソッドで
IEnumerable<T>
? (修辞的な質問)
は、その
Where
と
FirstOrDefault
メソッドは、以下のような複数の種類のシーケンスに対して適用可能です。
List<T>
,
T[]
,
Collection<T>
など。を実装する任意のシーケンスは
IEnumerable<T>
はこれらのメソッドを使用することができます。
Find
が利用できるのは
List<T>
. 一般的に適用可能なメソッドは、その後、より多くの
再利用可能
そして、より大きなインパクトを与えることができるのです。
次の質問は、なぜfindを全く付けなかったのかということですね。これは良いヒントです。唯一考えられるのは、FirstOrDefaultがnull以外の別のデフォルト値を返せるようにしたことです。そうでなければ、無意味な追加としか思えません。
Find
オン
List<T>
は他のメソッドより優先されます。
List<T>
は.NET 2.0のジェネリックスで追加されたものであり
Find
はそのクラスのAPIの一部でした。
Where
と
FirstOrDefault
の拡張メソッドとして追加されました。
IEnumerable<T>
を、.NETの後期バージョンであるLinqで実現しました。もしLinqが2.0のリリースで存在したなら、私はそのことを確信を持って言うことはできません。
Find
しかし、これは、以前の.NETバージョンに搭載され、後のバージョンで廃止または冗長となった他の多くの機能についても言えることです。
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] Could not find a part of the path ... binroslyncsc.exe
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] LINQとLambdaでJoin/Whereを実現する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】IntPtrとは一体何なのか?