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

C#で空のコレクションを安全に処理する方法:DefaultIfEmpty()の使い方

C#で空のコレクションを扱う際には、LINQのDefaultIfEmpty()メソッドが便利です。

配列やリストが空の場合、通常は要素にアクセスしようとするとエラーが発生したり、何も処理されなかったりします。しかし、DefaultIfEmpty()メソッドを使えば、コレクションが空のときにデフォルト値(既定値)を返してくれるため、エラーを回避しながら安全に処理を続けられます。

DefaultIfEmpty()の基本的な使い方

まず、空のリストを用意してみましょう。

List<float> myList = new List<float>();

このリストは要素を1つも持っていません。ここでDefaultIfEmpty()メソッドを呼び出すと、デフォルト値が返されます。

myList.DefaultIfEmpty();

float型の場合、デフォルト値は「0」です。つまり、空のコレクションに対しても、型に応じた初期値(数値型なら0、参照型ならnullなど)が1つだけ含まれたシーケンスが返されます。

サンプルコード

実際に動作を確認できる完全なサンプルコードを見てみましょう。

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

class Demo {
    static void Main() {
        // 空のリストを作成
        List<float> myList = new List<float>();

        // DefaultIfEmpty()でデフォルト値を取得
        var res = myList.DefaultIfEmpty();

        foreach (var a in res) {
            Console.WriteLine(a);
        }
    }
}

実行結果

0

リストが空であるにもかかわらず、「0」が出力されました。これはDefaultIfEmpty()がfloat型のデフォルト値を返したためです。

任意のデフォルト値を指定する

DefaultIfEmpty()には引数を渡すこともでき、独自のデフォルト値を指定できます。

var res = myList.DefaultIfEmpty(-1);

この場合、リストが空なら「-1」が出力されます。業務システムなどで「データがないことを明示したい」場面では、こちらの方が扱いやすいでしょう。

まとめ

  • DefaultIfEmpty()を使うと、空のコレクションに対してエラーを出さずにデフォルト値を返せる
  • 引数なしで呼び出せば型の既定値(数値型なら0など)、引数ありなら指定した値が返る
  • 空コレクションのチェック処理を簡潔に書けるため、可読性の向上にも役立つ

空のコレクションを頻繁に扱う場面では、if文での判定を減らせるDefaultIfEmpty()をぜひ活用してみてください。

  1. Pythonで空のリストを作成する方法|[]とlist()の2つの基本テクニック

    Pythonでプログラムを書いていると、「まず空のリストを用意しておいて、あとからデータを追加していきたい」という場面によく出会います。たとえば、forループで条件に合う要素だけを集めるときや、ユーザー入力を順次蓄積するときなどが代表例です。 Pythonで空のリストオブジェクトを作成する方法は、大きく分けて2つあります。1つ目は、代入文で角括弧 [] の中に何も要素を書かない方法。2つ目は、組み込み関数 list() を引数なしで呼び出す方法です。 方法1:角括弧 [] を使って空のリストを作る 最もシンプルで広く使われているのがこの書き方です。角括弧の中を空にして代入するだけで、空のリ

  2. Pythonのリスト内包表記で例外をキャッチするには?原因と対処法を解説

    Pythonには、例外を処理したり無視したりするための組み込み関数は存在しません。そのため、リスト内包表記の中ですべての例外を処理することは不可能です。 その理由は、リスト内包表記が「式(expression)」で構成されている点にあります。例外のキャッチや無視、ハンドリングを行えるのは「文(statement)」である try〜except ブロックだけだからです。式の中に try-except を埋め込むことは、Pythonの文法上できません。 現実的な回避策:関数へ処理を委譲する この制限に対する実用的な解決策のひとつが、例外が発生しうる部分式の評価を「関数」に委譲する方法です。関数の中