コレクションに要素が存在しない場合でも、
デフォルト値を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の引数には、要素が空の場合に返す値を指定できます。
(引数を指定しなかった場合は、要素の型のデフォルト値になります。)