0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[C#]null合体代入演算子の個人的な使いどころ

Posted at

はじめに

本記事は個人的に感じたnull合体代入演算子の使いどころについてまとめます。

null合体代入演算子とは

??=で表現される演算子です。
オペランドの左辺の変数やプロパティなどがnullの場合に、右辺の値が左辺に代入されます。
詳細はこちらを参照してください。

個人的に感じた使いどころ

インスタンス作成後に別途初期化用のメソッドで初期化をする際に使えると感じました。
例えば、以下のように電話帳(TelephoneDirectory)クラスで初期化用のinitメソッドで連絡先一覧(Contacts)プロパティを初期化するケースを考えます。
Initメソッドは複数回呼び出される可能性があるため、連絡先一覧(Contacts)プロパティはnull(初期化されていない)の場合のみ初期化しています。

/// <summary>
/// 電話帳
/// </summary>
public class TelephoneDirectory
{
	#region プロパティ

	/// <summary>
	/// 連絡先一覧
	/// </summary>
	public IList<Contact>? Contacts { get; private set; }

	#endregion

	#region 初期化

	/// <summary>
	/// 初期化する
	/// </summary>
	public void Init()
	{
		// 複数メソッドが呼び出された場合を想定して、連絡先一覧が初期化されていない場合のみ初期化する
		if (Contacts == null)
		{
			Contacts = new List<Contact>();
		}
	}

	#endregion
}

これをnull合体代入演算子を利用するとInitメソッドは以下のようになります。
if文を使わずに簡潔に記載できます。

/// <summary>
/// 初期化する
/// </summary>
public void Init()
{
	// 複数メソッドが呼び出された場合を想定して、連絡先一覧が初期化されていない場合のみ初期化する
	// null合体代入演算子
	Contacts ??= new List<Contact>();
}

この例のようにnull合体代入演算子は初期化用のメソッド内での初期化処理で活用できると感じました。

まとめ

本記事では個人的に感じたnull合体代入演算子の使いどころについてまとめました。
初期化用のメソッド内での初期化処理を簡潔に記載する際に活用できると感じました。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?