Fun Coding

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

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

リストの唯一の要素を取得するメソッドは2つあります。

方法
メソッド名
Single
SingleOrDefault
共通の仕様

・要素数が単数の場合は唯一の要素を返す。
・要素数が複数の場合はInvalidOperationExceptionが発生する。

異なる仕様
方法
メソッド名
該当する要素がない場合
Single InvalidOperationExceptionが発生する
SingleOrDefault リストの要素の型のデフォルト値を返す

コード
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, result2;

            // 条件がない場合
            /* result1 = list.Single(); */
            /* result2 = list.SingleOrDefault(); */

            Console.WriteLine("条件がない場合");
            Console.WriteLine("Single : System.InvalidOperationException");
            Console.WriteLine("SingleOrDefault : System.InvalidOperationException");
            Console.WriteLine();


            // 該当する要素がない場合
            /* result1 = list.Single(n => n % 10 == 0); */
            result2 = list.SingleOrDefault(n => n % 10 == 0);

            Console.WriteLine("該当する要素がない場合");
            Console.WriteLine("Single : System.InvalidOperationException");
            Console.WriteLine("SingleOrDefault : " + result2);
            Console.WriteLine();


            // 該当する要素が単数の場合
            result1 = list.Single(n => n % 5 == 0);
            result2 = list.SingleOrDefault(n => n % 5 == 0);

            Console.WriteLine("該当する要素が単数の場合");
            Console.WriteLine("Single : " + result1);
            Console.WriteLine("SingleOrDefault : " + result2);
            Console.WriteLine();

            // 該当する要素が複数の場合
            /* result1 = list.Single(n => n % 2 == 0); */
            /* result2 = list.SingleOrDefault(n => n % 2 == 0); */

            Console.WriteLine("該当する要素が複数の場合");
            Console.WriteLine("Single : System.InvalidOperationException");
            Console.WriteLine("SingleOrDefault : System.InvalidOperationException");
            Console.WriteLine();
        }
    }
}
出力
条件がない場合
Single : System.InvalidOperationException
SingleOrDefault : System.InvalidOperationException

該当する要素がない場合
Single : System.InvalidOperationException
SingleOrDefault : 0

該当する要素が単数の場合
Single : 5
SingleOrDefault : 5

該当する要素が複数の場合
Single : System.InvalidOperationException
SingleOrDefault : System.InvalidOperationException