C# LinqのSingle実行時に値がない場合にデフォルト値を返す

  • 作成日 2021.11.20
  • 更新日 2022.04.01
  • C#
C# LinqのSingle実行時に値がない場合にデフォルト値を返す

C#で、LinqのSingle実行時に値がない場合にデフォルト値を返すサンプルコードを記述してます。

環境

  • OS windows10 pro 64bit
  • Microsoft Visual Studio Community 2019 Version 16.7.1

LinqのSingle実行時に値がない場合にデフォルト値を返す

エラーを出さずにデフォルト値を返すには、Linqの「SingleOrDefault」を使用することで可能です。

// 配列を用意
int[] num = new int[] { 1, 3, 5 };       

// 値を取得
num.SingleOrDefault(v => v < 0); // 存在しないので「0」が返る

以下は、リスト内にある値に存在しない条件を指定して、結果を表示するだけのコードとなります。

using System;
using System.Collections.Generic;
using System.Linq;

namespace testapp
{
    class Program
    {
        static void Main(string[] args)
        {                
            // Listを用意
            var list = new List<int> { 1, 2, 3, 4, 5 };

            try
            {
                Console.WriteLine(list.SingleOrDefault(v => v > 6));
            }
            catch (InvalidOperationException e)
            {
                System.Console.WriteLine(e.ToString());                            
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.ToString());             
            }
        }
    }
}

実行結果

ただし、結果が複数ある場合は「InvalidOperationException」が返ります。

using System;
using System.Collections.Generic;
using System.Linq;

namespace testapp
{
    class Program
    {
        static void Main(string[] args)
        {                
            // Listを用意
            var list = new List<int> { 1, 2, 3, 4, 5 };

            try
            {
                Console.WriteLine(list.SingleOrDefault(v => v > 3));
            }
            catch (InvalidOperationException e)
            {
                System.Console.WriteLine(e.ToString());                            
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.ToString());             
            }
        }
    }
}

実行結果