【C#入門】SingleOrDefaultの使い方を解説【LINQ】


C#の『SingleOrDefault』の使い方が分からない…教えてください!


C#を学んでいるけど…

SingleOrDefaultの使い方が分からない

このような疑問を持っていませんか?

この記事では、LINQのひとつである『SingleOrDefault』について現役エンジニアが分かりやすく解説します。

時短でC#を学びたい方は、プログラミングスクールを受講しましょう!

Tech Academy

  • 受講者数No.1のプログラミングスクール
  • 通過率10%の選考に合格した優秀な講師
  • カリキュラムを閲覧制限なし
  • コースの種類が豊富
  • オンラインで完結
  • 無料体験あり
  • 無料カウンセリングあり
  • 学割あり

\ 公式サイトはこちら /

Tech Academy 公式サイト

まだ、C#の開発環境構築が出来ていない方はこちらを参考にしてください。

SingleOrDefaultの使い方

SingleOrDefaultの使い方を解説する前に、SingleOrDefaultで何が出来るのかを把握しておきましょう。

SingleOrDefault = 条件を満たす要素を抽出

このような考え方で問題ありません。SingleOrDefaultを使用すると配列(リスト)の中から、条件を満たしている値がただ一つの時にその値を返します。

ここまで読んでいると、「Singleと使い方変わらない」と思いますよね。

Singleについて分からない方は、以下の記事を参考にしてください。

SingleSingleOrDefaultの違いは以下のようになります。

Singleとの違い

条件を満たす要素が存在しない場合

  • Single ⇒ 例外エラー発生
  • SingleOrDefault ⇒ 規定値(stringはnull、intは0)を返す

ただし、条件を満たす要素が複数存在する場合には、例外エラーになりますので、注意してください。

それでは、実際のコードを用いながらSingleOrDefaultの使い方を解説していきます。

まずは、SingleOrDefaultの使い方から説明します。SingleOrDefaultを使うときには以下のように記述します。

配列.SingleOrDefault(条件式)

実際のコードを用いながらSingleOrDefaultの使い方を解説していきます。

SingleOrDefaultを使ってシーケンスを出力するときには以下のように記述します。

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

namespace sample
{
    class LinqSingleOrDefault
    {
        static public void BlogLinqSingleOrDefault()
        {
            //値一覧を変数NumberListとして宣言・初期化
            int[] NumberList = new int[] {
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10
            };

            //Single
            Console.WriteLine($"配列の要素で10と等しい値:{NumberList.SingleOrDefault(n => n == 10)}");
            Console.WriteLine($"配列の要素で10より大きい値:{NumberList.SingleOrDefault(n => n > 10)}");

            try
            {
                Console.WriteLine($"10以下の値:{NumberList.SingleOrDefault(n => n <= 10)}");
            }
            catch (System.Exception e)
            {
                Console.WriteLine($"条件を満たしている値がただ一つではないため、例外エラーが発生しました。");

                return;
            }
        }
    }
}

サンプルコードを実行した際の出力結果は、以下のようになります。

配列の要素で10と等しい値:10
配列の要素で10より大きい値:0
条件を満たしている値がただ一つではないため、例外エラーが発生しました。

注目していただきたいのは、SingleOrDefaultを使っている26行目、27行目、31行目です。

配列.SingleOrDefault(条件式)

これを基にサンプルコードを解説すると、「配列 = NumberList」、「条件式 = (n == 10), (n > 10), (n <= 10)」となります。

つまり、配列(NumberList)の各値のうち条件式((n == 10), (n > 10), (n <= 10))を満たしている値がただ一つの時に出力(Console.WriteLine)するということです。

このようにして、C#ではSingleOrDefaultを使用することで、コードを簡潔に書くことが出来ます。

【まとめ】SingleOrDefaultは条件を満たした最後の要素を出力できる

SingleOrDefaultの使い方は理解できましたか?

まとめ

  • SingleOrDefault = 条件を満たす最後の要素を抽出
  • 配列.SingleOrDefault(条件式)
  • 指定したインデックスが存在しない場合は規定値(stringはnull、intは0)を返す

この記事では、C#のSingleOrDefaultの使い方について紹介しました。

今後も一緒に学んでいきましょう!

最後までお読みいただき、ありがとうございました!

Tech Academy

  • 受講者数No.1のプログラミングスクール
  • 通過率10%の選考に合格した優秀な講師
  • カリキュラムを閲覧制限なし
  • コースの種類が豊富
  • オンラインで完結
  • 無料体験あり
  • 無料カウンセリングあり
  • 学割あり

\ 公式サイトはこちら /

Tech Academy 公式サイト