??= 演算子 (null 合体演算子) の意味 - C#
概要
??= 演算子の意味と動作を紹介します。
??=
演算子は「null 合体演算子」と呼ばれており、nullの場合の処理を分けることができます。
メモ
??
演算子については
こちらの記事を参照してください。
書式
意味
??=
演算子の左辺 (代入先変数) の値が null の場合、演算子の右辺 (値、変数) の値を代入します。
記述例
text変数がnullの場合、空文字列を代入します。
text ??= "";
weight変数がnullの場合、init_weight変数の値を代入します。
weight ??= init_weight;
if文での書き換え
下記コードは次のif文で書き換えられます。
int? value1;
int value2;
value1 ??= value2;
int? value1;
int value2;
if (value1 == null){
value1 = value2;
}
/*
//または
if (value1 == null) value1 = value2;
*/
プログラム例
以下のプログラムを作成します。
UI
下図のUIを作成します。ラジオボタン、ボタン、テキストボックスを配置します。(下図ではボタンが2つ配置されていますが、button2 のみを利用します。)
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace NullOperatorDemo
{
public partial class FormNullCoaleescingAssignmentOperator : Form
{
public FormNullCoaleescingAssignmentOperator()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
string? MessageText;
if (radioButton1.Checked == true) {
MessageText = "正常です";
}
else {
MessageText = null;
}
MessageText ??= "異常です";
textBox1.Text = MessageText;
}
}
}
解説
下記のコードでは
MessageText
変数を宣言し値を代入しています。 radioButton1 にチェックが付いている場合は "正常です" の文字列を代入します。
radioButton2 にチェックが付いている場合は null を代入します。
string? MessageText;
if (radioButton1.Checked == true) {
MessageText = "正常です";
}
else {
MessageText = null;
}
MessageText
変数に「null合体演算子」を用いて代入します。MessageText の値が null の場合にのみ "異常です" の文字列を代入します。
MessageText ??= "異常です";
MessageText
変数の値をテキストボックスに表示します。radioButton1がチェックされている場合は「正常です」の文字列がテキストボックスに表示され、radioButton2がチェックされている場合は
nullの変数に「異常です」の値が代入されるため、「異常です」の文字列がテキストボックスに表示されます。
textBox1.Text = MessageText;
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[radioButton1]がチェックされた状態でボタンをクリックします。テキストボックスに "正常です" の文字列が表示されます。
[radioButton2]をクリックしてチェックを変更します。[radioButton2]がチェックされている状態で[button2]をクリックします。
テキストボックスに「異常です」の文字列が表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用