コレクション LINQ

[C#] コレクション要素が空の場合にデフォルト値を返す(.DefaultIfEmpty)

コレクションに要素が存在しない場合でも、
デフォルト値を1件返したい場合は .DefaultIfEmpty() を使用します。

サンプル1(List<int>型の場合)

例1-1)List<int>型の場合(要素が存在する場合)

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

//Listを生成する
List<int> list = new List<int>() { 1, 2, 3 };

//Listの中身を表示する
foreach (var a in list.DefaultIfEmpty())
{
  Console.WriteLine(a);
}

結果

1
2
3

要素が存在する場合は要素がそのまま返ります。

例1-2)List<int>型の場合(要素が存在しない場合)

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

//Listを生成する
List<int> list = new List<int>();

//Listの中身を表示する
foreach (var a in list.DefaultIfEmpty())
{
  Console.WriteLine(a);
}

結果

0

要素が存在しない場合は、intのデフォルト値「0」が返ります。

サンプル2(データクラスListの場合)

例2-1)データクラスListの場合(要素が存在する場合)

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

//データクラス(Prefクラス)
class Pref{
  public int No {get; set;} = 999;
  public string Name {get; set;} = "なし";
  public int Population {get; set;} = 0;
}

//PrefのListを生成
var list = new List<Pref>();
list.Add(new Pref{No=1, Name="北海道", Population=5381733});
list.Add(new Pref{No=2, Name="青森県", Population=1308265});
list.Add(new Pref{No=3, Name="岩手県", Population=1279594});

//Listの中身を表示する
foreach(var a in list.DefaultIfEmpty(new Pref()))
{
  Console.WriteLine(a.Name);
}

結果

北海道
青森県
岩手県

要素が存在する場合は要素がそのまま返ります。

例2-2)データクラスListの場合(要素が存在しない場合)

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

//データクラス(Prefクラス)
class Pref{
  public int No {get; set;} = 999;
  public string Name {get; set;} = "なし";
  public int Population {get; set;} = 0;
}

//PrefのListを生成
var list = new List<Pref>();

//Listの中身を表示する
foreach(var a in list.DefaultIfEmpty(new Pref()))
{
  Console.WriteLine(a.Name);
}

結果

なし

要素が存在しない場合は、Pref.Nameのデフォルト値「なし」が返ります。

備考

  • LINQを使用するには、「using System.Linq;」の宣言が必要です。
  • DefaultIfEmptyの引数には、要素が空の場合に返す値を指定できます。
    (引数を指定しなかった場合は、要素の型のデフォルト値になります。)

関連記事

-コレクション, LINQ