はじめに
「変数が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:
コメント