変数名の後ろに"?" がある - Null条件演算子の利用 - C#
C#で変数名の後ろに"?"記号がついているコードの紹介です。
変数名の後ろの"?"
この記号は「Null条件演算子」を表しています。Null条件演算子を使うことで、nullのチェックをシンプルに記述できます。
Null条件演算子の利用
プログラム1: シンプルなNull条件演算子の利用
コード例と解説
下記のコードを例にします。string型の変数valueに文字列を代入し、文字列の長さをテキストボックスに表示します。このコードは問題なく動作し、テキストボックスに"7"が表示されます。("Penguin"が7文字のため)
string value = "Penguin";
textBox1.Text = Convert.ToString(value.Length);
string型の変数valueにnullが代入された場合、このコードは例外(System.NullReferenceException)が発生します。nullオブジェクトに対してLengthプロパティを呼び出したため、例外発生となります。
string value = null;
textBox1.Text = Convert.ToString(value.Length);
補足
ちなみに下記ではnullオブジェクトのプロパティやメソッドを呼び出さないため、例外は発生しません。
string value = null;
textBox1.Text = Convert.ToString(value);
上記を対策するためには、オブジェクトがnullであるかをチェックする必要があります。
valueがnullでないことを確認してから、valueのLengthプロパティにアクセスします。
string value = null;
if (value != null) {
textBox1.Text = Convert.ToString(value.Length);
}
従来のC#では上記のコードを記述していましたが、nullチェックのためにif文を記述する必要があります。これをシンプルに記述できるために用意された演算子が、「Null条件演算子」です。「Null条件演算子」を利用すると、上記のコードは下記になります。
「Null条件演算子」はC# 6.0以降(Visual Studio 2015以降)で利用可能です。
string value = null;
textBox1.Text = Convert.ToString(value?.Length);
変数 value がnullである場合、"value?.Length" と記述することで、全体がnullの値となり、例外は発生しません。
UI
下図のUIを作成します。テキストボックスとボタンを4つ配置します。
コード
下記のコードを記述します。
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 SimpleNullConditionalOperators
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string value = "Penguin";
textBox1.Text = Convert.ToString(value.Length);
}
private void button2_Click(object sender, EventArgs e)
{
string value = null;
textBox1.Text = Convert.ToString(value.Length);
}
private void button3_Click(object sender, EventArgs e)
{
string value = null;
if (value != null) {
textBox1.Text = Convert.ToString(value.Length);
}
}
private void button4_Click(object sender, EventArgs e)
{
string value = null;
textBox1.Text = Convert.ToString(value?.Length);
}
}
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。"Penguin"の文字列の長さである"7"がテキストボックスに表示されます。
[button2]をクリックします。例外が発生し実行時エラーになります。nullの値に対してプロパティアクセスするため、System.NullReferenceException 例外が発生します。
[button3]をクリックします。例外は発生せず、テキストボックスにも何も表示されません。
[button4]をクリックします。button3と同様に例外は発生せず、テキストボックスにも何も表示されません。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2016-12-22