リストの最後の要素を取得するメソッドは3つあります。
方法 | メソッド名 |
---|---|
① |
FindLast |
② |
Last |
③ |
LastOrDefault |
共通の仕様
どれも指定した条件に一致する要素を検索し、最もインデックスが大きい要素を返す。
末尾から検索し、最後の要素を返すイメージ。
異なる仕様
方法 | メソッド名 |
条件に一致する要素がない場合 |
条件がない場合 |
---|---|---|---|
① |
FindLast | リストの要素の型のデフォルト値を返す | ビルドエラーとなる |
② |
Last | InvalidOperationExceptionが発生する | 末尾の要素を返す |
③ |
LastOrDefault | リストの要素の型のデフォルト値を返す | 末尾の要素を返す |
例
コード
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.FindLast(); */ int result2 = list.Last(); int result3 = list.LastOrDefault(); Console.WriteLine("条件がない場合の検索"); Console.WriteLine("FindLast : ビルドエラー"); Console.WriteLine("Last : " + result2); Console.WriteLine("LastOrDefault : " + result3); Console.WriteLine(); // 条件に一致する要素がある場合の検索 result1 = list.FindLast(n => n % 2 == 1); result2 = list.Last(n => n % 2 == 1); result3 = list.LastOrDefault(n => n % 2 == 1); Console.WriteLine("条件に一致する要素がある場合の検索"); Console.WriteLine("FindLast : " + result1); Console.WriteLine("Last : " + result2); Console.WriteLine("LastOrDefault : " + result3); Console.WriteLine(); // 条件に一致する要素がない場合の検索 result1 = list.FindLast(n => n % 2 == 2); /* result2 = list.Last(n => n % 2 == 2); */ result3 = list.LastOrDefault(n => n % 2 == 2); Console.WriteLine("条件に一致する要素がない場合の検索"); Console.WriteLine("FindLast : " + result1); Console.WriteLine("Last : System.InvalidOperationException"); Console.WriteLine("LastOrDefault : " + result3); Console.WriteLine(); } } }
出力
条件がない場合の検索 FindLast : ビルドエラー Last : 6 LastOrDefault : 6 条件に一致する要素がある場合の検索 FindLast : 5 Last : 5 LastOrDefault : 5 条件に一致する要素がない場合の検索 FindLast : 0 Last : System.InvalidOperationException LastOrDefault : 0