[C#][null] nullのときだけ値を代入する ??= 演算子

スポンサーリンク

はじめに

「変数がnullなら初期化する」というコードはよく登場します。

たとえば次のコードです。

if (items is null)
{
    items = new List();
}

この処理は、??=演算子を使うと1行で書けます。

??=を使う

List? items = null;

items ??= new List();

items.Add("Apple");

??=は、

左側がnullのときだけ右側の値を代入する

という演算子です。

つまり、

items ??= new List();

は、次のコードと同じ目的で使えます。

if (items is null)
{
    items = new List();
}

値が入っていれば何もしない

List<string>? items = new List<string>
{
    "Apple"
};

items ??= new List();

Console.WriteLine(items.Count);
```

すでにitemsにはListが入っているため、新しいListへの置き換えは行われません。

結果は次の通りです。

1

遅延初期化にも便利

必要になったときだけオブジェクトを作るコードにも向いています。

_cache ??= LoadData();

_cacheがすでに存在している場合、LoadData()は実行されません。

まとめ

次のようなコードを見つけたら、

if (value is null)
{
    value = new Something();
}

??=で書けないか確認してみるとよいでしょう。

value ??= new Something();

コードが短くなるだけでなく、「nullなら初期化する」という意図も読み取りやすくなります。

今回のTips:nullのときだけ初期化したいなら??=を使う。

Please follow and like us:

コメント

タイトルとURLをコピーしました