??= 演算子の意味

??= 演算子の意味を紹介します。

概要

新しいC#のコードでは??=の演算子がコード中に時々見られることがあります。 以前のC#にはなかった書式のため、わかりにくいこともあります。 この記事では、??=演算子の意味を紹介します。

書式

(代入先変数) ??= (変数または値)


??=演算子の左辺の値がnullでなかった場合に右辺の値が左辺の変数に代入されます。

コードの書き換え

??=演算子は次のコードで書き換えできます。

書き換え元コード
  int? ivalue = null;
  int value1 = 25;
  ivalue ??= value1;

書き換えコード
  int? ivalue = null;
  int value1 = 25;
  if (ivalue is null) ivalue = value1;

プログラム例

.NET 6でWindows Formアプリケーションを作成します。

補足
??=演算子は C# 8.0以上で利用可能です。.NET Framework 4.8 のアプリケーションでは ??= 演算子はコンパイルエラーになります。

UI

下図のフォームを作成します。フォームにボタンとMultilineプロパティをtrueに設定した複数行のテキストボックスを配置します。
??= 演算子の意味:画像1

コード

フォームに下記のコードを実装します。[button1]のclickイベントを実装しています。

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 NullableDemoDotNet6
{
  public partial class FormQuestionQuestionEqualExpressions : Form
  {
    public FormQuestionQuestionEqualExpressions()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int? vi1 = 12;
      string? vs1 = "ぺんぎんクッキー";

      int? value1 = -1;
      int? value2 = null; 
      string? value3 = "未設定"; 
      string? value4 = null;

      value1 ??= vi1; 
      value2 ??= vi1;
      value3 ??= vs1;
      value4 ??= vs1;
      
      textBox1.Text += value1.ToString() + "\r\n";
      textBox1.Text += value2.ToString() + "\r\n";
      textBox1.Text += value3 + "\r\n";
      textBox1.Text += value4 + "\r\n";
    }
  }
}

解説

value1 value2 value3 value4 の変数を宣言し初期値を代入しています。

  int? value1 = -1;
  int? value2 = null; 
  string? value3 = "未設定"; 
  string? value4 = null;


??=演算子で変数に値を代入します。今回のコードの場合、value2value4 変数が null の値のため、 value2にvl1の値が代入され、value4にvs1の値が代入されます。value1, value3 変数は null ではないため値の代入はされず、初期値の値がそのまま保存されます。

  value1 ??= vi1; 
  value2 ??= vi1;
  value3 ??= vs1;
  value4 ??= vs1;


value1,value2,value3,value4の値をテキストボックスに表示します。値はvalue1から順に -1 12 未設定 ぺんぎんクッキー となります。

  textBox1.Text += value1.ToString() + "\r\n";
  textBox1.Text += value2.ToString() + "\r\n";
  textBox1.Text += value3 + "\r\n";
  textBox1.Text += value4 + "\r\n";

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。
??= 演算子の意味:画像2

[button1]をクリックします。テキストボックスに結果が表示されます。
??= 演算子の意味:画像3

??= 演算子の動作を確認できました。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2022-01-30
Copyright © 1995–2025 iPentec all rights reserverd.