C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# Linq FirstOrDefaultメソッドの使い方を解説

C#のLINQにおけるFirstOrDefault()メソッドは、シーケンス(コレクション)の最初の要素を返すメソッドです。もしシーケンス内に要素が存在しない場合には、例外をスローする代わりに、その型のデフォルト値を返します。

この動作により、空のコレクションを扱う際でも安全に処理を行えるのが大きな特徴です。類似のFirst()メソッドでは要素が存在しない場合にInvalidOperationExceptionが発生しますが、FirstOrDefault()を使えばエラーを回避できます。

空のリストでの動作確認

まず、以下のような空のリストを用意します。

List<double> val = new List<double> { };

このリストは空のコレクションであるため、最初の要素を直接取得して表示することはできません。そこで、FirstOrDefault()メソッドを使用すると、要素が存在しない場合のデフォルト値が返されます。

val.AsQueryable().FirstOrDefault();

double型の場合、デフォルト値は「0」になります。int型なら0、参照型であればnullが返される点も覚えておくと便利です。

サンプルコード

以下に、FirstOrDefault()メソッドを使用した完全なサンプルプログラムを示します。

using System;
using System.Collections.Generic;
using System.Linq;
class Demo {
    static void Main() {
        List<double> val = new List<double> { };
        double d = val.AsQueryable().FirstOrDefault();
        Console.WriteLine("Default Value = "+d);
        if (d == 0.0D) {
            d = 0.1D;
        }
        Console.WriteLine("Default Value changed = "+d);
    }
}

実行結果

Default Value = 0
Default Value changed = 0.1

コードの解説

このサンプルでは、まず空のList<double>を作成しています。AsQueryable()でクエリ可能な形式に変換した後、FirstOrDefault()を呼び出すと、要素が存在しないためデフォルト値の「0」が返されます。

続くif文では、取得した値が0.0かどうかを判定し、条件を満たしていれば値を0.1に変更しています。このように、FirstOrDefault()の戻り値を利用すれば、空のコレクションに対するフォールバック処理を簡潔に記述できます。

まとめ

FirstOrDefault()メソッドは、シーケンスの先頭要素を取得しつつ、要素がない場合にもデフォルト値を返してくれる安全なメソッドです。空のコレクションが発生しうる場面では、First()ではなくFirstOrDefault()を使うことで、例外処理を減らし、堅牢なコードを書くことができます。

  1. 【初心者向け】C#のLINQ Whereメソッドの使い方を徹底解説!条件に合う要素を抽出する方法

    C# LINQのWhereメソッドとは? C#のLINQに用意されているWhereメソッドは、指定した条件(述語:Predicate)に基づいて、コレクションや配列の中から該当する要素だけを抽出(フィルタリング)するためのメソッドです。 データの一覧から特定の条件を満たす項目のみを取り出したい場面は開発現場で非常に多く、WhereメソッドはLINQの中でも特に使用頻度の高い機能といえます。 例えば、以下のように記述すると「70以上の要素」だけを取得できます。 Where((n, index) => n >= 70); このラムダ式では、各要素 n が70以上であるかどうかを判定し、

  2. C# LINQ Distinct()メソッドでリストから重複要素を削除する方法

    C#のLINQで重複しない要素(一意の値)だけを取得したい場合は、Distinct()メソッドを使用します。このメソッドは、シーケンス内の重複する要素を取り除き、各要素を1度だけ返してくれます。 重複要素を含むリストの準備 まずは、重複した要素を含むリストを用意しましょう。 List<int> points = new List<int> { 5, 10, 5, 20, 30, 30, 40, 50, 60, 70 }; このリストには「5」と「30」がそれぞれ2回含まれています。 Distinct()メソッドで重複を除去する 重複を除いた要素を取得するには、次のように