リストの最初の要素を取得するメソッドは3つあります。
方法 | メソッド名 |
---|---|
① |
Find |
② |
First |
③ |
FirstOrDefault |
共通の仕様
どれも指定した条件に一致する要素を検索し、最もインデックスが小さい要素を返す。
先頭から検索し、最初の要素を返すイメージ。
異なる仕様
方法 | メソッド名 |
条件に一致する要素がない場合 |
条件がない場合 |
---|---|---|---|
① |
Find | リストの要素の型のデフォルト値を返す | ビルドエラーとなる |
② |
First | InvalidOperationExceptionが発生する | 先頭の要素を返す |
③ |
FirstOrDefault | リストの要素の型のデフォルト値を返す | 先頭の要素を返す |
例
コード
using System; using System.Collections.Generic; using System.Linq; namespace Sample { /// <summary> /// メインプログラム /// </summary> public class Program { /// <summary> /// 方法の比較 /// </summary> static void Main() { // リストを生成 var list = new List<int>(); // リストに値を追加 list.Add(1); list.Add(2); list.Add(3); list.Add(4); list.Add(5); list.Add(6); // 条件がない場合の検索 int result1; /* = list.Find(); */ int result2 = list.First(); int result3 = list.FirstOrDefault(); Console.WriteLine("条件がない場合の検索"); Console.WriteLine("Find : ビルドエラー"); Console.WriteLine("First : " + result2); Console.WriteLine("FirstOrDefault : " + result3); Console.WriteLine(); // 条件に一致する要素がある場合の検索 result1 = list.Find(n => n % 2 == 0); result2 = list.First(n => n % 2 == 0); result3 = list.FirstOrDefault(n => n % 2 == 0); Console.WriteLine("条件に一致する要素がある場合の検索"); Console.WriteLine("Find : " + result1); Console.WriteLine("First : " + result2); Console.WriteLine("FirstOrDefault : " + result3); Console.WriteLine(); // 条件に一致する要素がない場合の検索 result1 = list.Find(n => n % 2 == 2); /* result2 = list.First(n => n % 2 == 2); */ result3 = list.FirstOrDefault(n => n % 2 == 2); Console.WriteLine("条件に一致する要素がない場合の検索"); Console.WriteLine("Find : " + result1); Console.WriteLine("First : System.InvalidOperationException"); Console.WriteLine("FirstOrDefault : " + result3); Console.WriteLine(); } } }
出力
条件がない場合の検索 Find : ビルドエラー First : 1 FirstOrDefault : 1 条件に一致する要素がある場合の検索 Find : 2 First : 2 FirstOrDefault : 2 条件に一致する要素がない場合の検索 Find : 0 First : System.InvalidOperationException FirstOrDefault : 0