LINQ

[C#] LINQのFirstOrDefaultでnullを返さない方法

2021年7月31日

コレクション要素で条件に合致する最初の要素を取得するには
.FirstOrDefault を使用しますが、対象データが存在しない場合はnullが返ります。
(int型などの基本データ型の場合は0が返ります。)

このような場合でもnullを返したくない場合のサンプルです。

サンプル

例1)List<int>型の場合

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

//intのListを生成
List<int> list = new List<int>(){6, 3, 7, 3, 5, 3};

//9以上の要素が存在しなければデフォルト値を返す
int result = list.FirstOrDefault(x => x >= 9);

結果

0

intなどの基本データ型の場合は、そのデータ型のデフォルト値が返ります。

例2)データクラスListの場合

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

//データクラス(Prefクラス)
class Pref{
  public int No {get; set;}
  public string Name {get; set;}
  public int Population {get; set;}
}

//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.Add(new Pref{No=4, Name="宮城県", Population=2333899});
list.Add(new Pref{No=5, Name="秋田県", Population=1023119});

//Pref.Noが99の要素が無ければ、デフォルトクラスを返す
var result = dc.FirstOrDefault(x => x.No == 99)
 ?? new Pref { No = 99, Name = "なし", Population = 999 };

結果

[99, "なし", 999]

null合体演算子(??)を使用して、nullの場合はクラスを生成して返すようにしています。

備考

  • LINQを使用するには、「using System.Linq;」の宣言が必要です。

関連記事

-LINQ
-