Fun Coding

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

【C#】リストの最後の要素を取得する(LastOrDefault)

リストの最後の要素を取得する方法の1つに「LastOrDefault」メソッドがあります。
LINQを使った方法になります。
サンプルコードを交えて解説したいと思います。

説明

条件を指定するかどうかで動作が変わります。

① 条件がない場合
リストの末尾の要素を返す。

② 条件がある場合
リストから指定した条件に一致する要素を検索し、最もインデックスが大きい要素を返す。

ポイント

・取得できる要素は1つ
・条件に一致する要素がない場合はリストの要素の型のデフォルト値を返す


最も小さいインデックスを取得したい場合は「FirstOrDefault」を使います。

コード
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sample {
    /// <summary>
    /// メインプログラム
    /// </summary>
    public class Program {
        /// <summary>
        /// LastOrDefaultの使い方
        /// </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.LastOrDefault();
            Console.WriteLine("条件がない : " + result1);

            // 該当する要素がある場合の検索
            int result2 = list.LastOrDefault(n => n % 2 == 1);
            Console.WriteLine("2で割った余りが1 : " + result2);

            // 該当する要素がない場合の検索
            int result3 = list.LastOrDefault(n => n % 2 == 2);
            Console.WriteLine("2で割った余りが2 : " + result3);
        }
    }
}
出力
条件がない : 6
2で割った余りが1 : 5
2で割った余りが2 : 0


末尾から指定した条件に一致する要素を検索し、最初に見つかった要素を返すイメージ。
・条件がない : 末尾の要素は6 → 6が出力
・2で割った余りが1:最もインデックスが大きい要素は5 → 5が出力
・2で割った余りが2:リストに要素はない → int型のデフォルト値が出力