Start Debugging
2020-04-05 更新日 2023-11-05 csharp Edit on GitHub

C# 8.0 の null 合体代入 ??=

キャッシュや条件付き代入などの実用的な例を交えて、C# 8.0 の null 合体代入演算子 (??=) の動作を学びます。

この演算子を使うと、左辺の値が null と評価された場合にのみ、右辺のオペランドの値を左辺のオペランドに代入できます。

ごく基本的な例を見てみましょう。

int? i = null;

i ??= 1;
i ??= 2;

上の例では null 許容の int 変数 i を宣言し、それに対して 2 回の null 合体代入を行います。最初の代入時に inull と評価されるため、i には 1 が代入されます。次の代入時には i1 で、null ではないため、その代入はスキップされます。

予想どおり、右辺のオペランドの値は、左辺のオペランドが null の場合にのみ評価されます。

int? i = null;

i ??= Method1();
i ??= Method2(); // Method2 is never called because i != null

ユースケース

この演算子は、特定の変数の値が設定されるまで複数の if 分岐をたどるような場面で、コードを簡潔かつ読みやすくするのに役立ちます。

その一例がキャッシュです。次の例では、キャッシュから取得しようとした後でも user がまだ null のときにのみ GetUserFromServer が呼び出されます。

var user = GetUserFromCache(userId);
user ??= GetUserFromServer(userId);

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る