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

C#のSingleOrDefault()メソッドの使い方をわかりやすく解説

SingleOrDefault()メソッドとは

C#のLINQに含まれるSingleOrDefault()メソッドは、シーケンスから単一の特定要素を返すメソッドです。大きな特徴は、要素がシーケンス内に存在しない場合でも例外をスローせず、その型のデフォルト値を返すという点にあります。

たとえば参照型の場合は null、数値型の場合は 0 といったデフォルト値が返されるため、空のコレクションを安全に扱いたい場面で非常に便利です。

Single()メソッドとの違い

似た名前の Single() メソッドは、要素が存在しない場合や複数の要素が見つかった場合に例外(InvalidOperationException)をスローします。一方、SingleOrDefault() は「要素が0個」の場合のみデフォルト値を返し、「要素が2個以上」の場合は例外をスローするという違いがあります。

サンプルコード

ここでは、要素を1つだけ持つ文字列配列と、空の文字列配列の2つを用意して動作を確認してみましょう。

string[] str1 = { "one" };
string[] str2 = { };

1つ目の配列には単一の要素が存在するため Single() で取得し、2つ目の配列は空であるため SingleOrDefault() を使ってチェックします。

str2.AsQueryable().SingleOrDefault();

以下は、SingleOrDefault() メソッドの実際の使用例です。

コード例

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

public class Demo {
    public static void Main() {
        string[] str1 = { "one" };
        string[] str2 = { };

        string res1 = str1.AsQueryable().Single();
        Console.WriteLine("String found: " + res1);

        string res2 = str2.AsQueryable().SingleOrDefault();
        Console.WriteLine(String.IsNullOrEmpty(res2) ? "String not found" : res2);
    }
}

実行結果

String found: one
String not found

まとめ

このように、SingleOrDefault() を使えば、シーケンスが空でも例外を発生させることなく処理を続行できます。要素が必ず1件だけ存在することが保証されている場合は Single()、存在しない可能性がある場合は SingleOrDefault() を使うと、コードがより安全で読みやすくなります。

  1. C#のString.PadRightメソッドで文字列の末尾を埋める方法

    C#のString.PadRightメソッドとはC#のPadRight()メソッドを使うと、文字列の末尾(右側)にスペースを追加し、指定した全長まで文字列を埋めることができます。スペースだけでなく、任意のUnicode文字を埋め込み文字として指定することも可能です。例として、次のような文字列を用意します。string myStr = Text1;この文字列の末尾にパディングを設定するには、PadRightメソッドを使用します。以下のように記述すると、全体の長さが10文字になるよう、末尾にスペースが追加されます。myStr.PadRight(10);それでは、実際の使用例を見ていきましょう。サン

  2. 【C#】String.Join()メソッドで文字列配列を連結する方法

    String.Join()メソッドとはC#のString.Join()メソッドは、文字列配列のすべての要素を1つの文字列に連結するためのメソッドです。各要素の間には、引数で指定した区切り文字(セパレーター)が自動的に挿入されます。たとえば、区切り文字として改行コード「\n」を指定すれば、配列の各要素がそれぞれ別の行に配置された、複数行の文字列を簡単に作成できます。基本的な構文String.Join(\n, starray);第1引数: 要素間に挿入する区切り文字第2引数: 連結対象の文字列配列戻り値: 連結された1つの文字列サンプルコード以下は、5つの文字列要素を持つ配列を改行コードで連結し、