Fun Coding

学んだことを記録していきます!

【C#】リストの最後の要素を取得する方法 まとめ

リストの最後の要素を取得するメソッドは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