値がnullの場合に空文字列を代入するコードをシンプルに記述したい

値がnullの場合に空文字列を代入するシンプルなコードを紹介します。

準備

UI

下図のフォームを作成します。
値がnullの場合に空文字列を代入するコードをシンプルに記述したい:画像1

コード

以下のコードを準備します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace NullCoalescingOperator
{
  public partial class FormNullString : Form
  {
    public FormNullString()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string value = getInfo();
      if (value == null) {
        throw new NullReferenceException("値がnullです。");
      }
      textBox1.Text = value;
    }

    private string? getInfo()
    {
      Random r = new Random();
      if (r.NextDouble() < 0.5) {
        return "Penguin";
      }
      else {
        return null;
      }
    }
  }
}

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。
値がnullの場合に空文字列を代入するコードをシンプルに記述したい:画像2

[button1]をクリックすると、50%の確率でテキストボックスに"Penguin"の文字列が表示され、それ以外の場合は例外が発生します。
値がnullの場合に空文字列を代入するコードをシンプルに記述したい:画像3
値がnullの場合に空文字列を代入するコードをシンプルに記述したい:画像4

例外の対処

例外が発生しないように、getInfo()メソッドの戻り値がnullの場合に、value変数に空文字列を代入する処理に変更します。
button1のclickイベントハンドラのコードを以下に変更します。

private void button1_Click(object sender, EventArgs e)
{
  string value;
  string result = getInfo();
  if (result != null){
    value = result;
  }
  else{
    value = "";
  }

  if (value == null) {
    throw new NullReferenceException("値がnullです。");
  }
  textBox1.Text = value;
}


上記のコードで例外は発生しなくなりますが、代入部分のコードをもっとシンプルに記述したいです。

シンプルな記述 null合体演算子の利用

null合体演算子を利用すると、nullの場合の値の代入をシンプルに記述できます。
button1のclickイベントハンドラのコードを以下に変更します。
??演算子により、getInfo() メソッドの戻り値がnullの場合は、value変数に空文字列を代入します。
??演算子 (null合体演算子) の動作の詳細についてはこちらの記事を参照して下さい。

private void button1_Click(object sender, EventArgs e)
{
  string value = getInfo() ?? "";

  if (value == null) {
    throw new NullReferenceException("値がnullです。");
  }
  textBox1.Text = value;
}
AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2022-11-04
Copyright © 1995–2025 iPentec all rights reserverd.