C#のnull合体演算子(”??”)の使い方!5パターン確認!

C# C#

C#でnull合体演算子を使う方法について書きました。
null合体演算子を使うことで、値がnullか判定して、nullだったときには指定した値を返します。

記事内のサンプルコードについては、.Netのバージョン6(C#のバージョン10)で確認しました。
null合体演算子の公式ドキュメントについてはこちらにあるので確認してみてください。

null合体演算子(”??”)の使い方

null合体演算子は値がnullかを判定して、nullじゃないときには値を返して、nullだったときには指定した値を返します。
例えば、下記のように使うことができます。

string? text = null;
string result = text ?? "textはnull";

Console.WriteLine(result); // textはnull

最初に文字列型のtext変数に対して、nullを代入しました。

次の処理で、text変数がnullかをnull合体演算子で判定しています。
text ??」でtext変数がnullか確認することができます。

nullじゃないときには、text変数の値がそのまま返って、nullだったときには右側に指定した値が返ります。
今回はnullなので、右側に指定した「textはnull」が返ってきて、result変数に代入されて出力されます。

右側に書ける値はnullか確認する変数と同じデータ型のものになります。

“??=”演算子について

先ほどは”??”を使ってnullと判定しましたが、“??=”を使うことで、nullだったときには指定値を変数に代入することができます。
例えば、下記のように使えます。

string? fruits = null;
fruits ??= "fruitsはnullです!";

Console.WriteLine(fruits); // fruitsはnullです!

最初に文字列型のfruits変数にnullを代入しました。

次の処理で、??=を使ってnullか確認しています。
nullだったときには、右側の値が代入されて、nullじゃなかったときには特に処理されずにスルーされます。
今回はnullなので、右側にある「fruitsはnullです!」が代入されて出力されます。

先ほどのnull合体演算子でも、同じ処理を下記のように書くことはできます。

string? fruits = null;
fruits = fruits ?? "fruitsはnullです!";

ちょっと長くなりましたね。
同じ変数にnullだったときに代入する場合には、こちらの??=を使った方が短くかけてよさそうです。

null合体演算子を確認5パターン

nullのときのみに機能すると思いますが、他のパターンでどうなるか検証してみました。

数値型でnullを判定

数値型でnull判定したときです。
下記の出力結果は「777」になりました。

int? number = null;
int result = number ?? 777;

Console.WriteLine(result); // 777

0を入力

数値の「0」を入力したときです。
下記の出力結果は「0」になりました。

int? number = 0;
int result = number ?? 777;

Console.WriteLine(result); // 0

空文字の入力

空文字を入力したときです。
下記の出力結果は「””」(空文字)になりました。(空なので何も出力されません)

string text = "";
string result = text ?? "textはnull";

Console.WriteLine(result); // ""

空の配列を入力

配列を定義しただけのときです。

string[] fruits = new string[3];
fruits = fruits ?? new string[3] {"apple", "banana", "grape"};

foreach (string fruit in fruits) {
    Console.WriteLine(fruit);
}
Console.WriteLine(fruits.Length);

何も入っていませんが、配列自体はあるので下記のように出力されます。(空行が3つ、要素数が3)
nullとは判定されません。




3

空のリストを入力

何も値を入れていない空のリストのときです。

List<string>? fruits = new List<string>();
fruits = fruits ?? new List<string> {"apple"};

foreach (string fruit in fruits) {
    Console.WriteLine(fruit);
}
Console.WriteLine(fruits.Count());

何も入っていませんが、newでリストを作っているため、nullとは判定されません。
下記のように、何も出力されず要素が0個になります。

0

null合体演算子の使い方まとめ

今回はC#のnull合体演算子について書きました。

記事の内容を最後にまとめます。
null合体演算子を使うと、値がnullか確認して、nullだったときに返す値を指定できました。

確認したパターンを表にすると、下記のようになります。

入力値 null判定
null true
0 false
“”(空文字) false
string[5] false
new List<string> false

しっかりとnullの場合のみnull判定されました。
何も値を入れていない空配列や空リストのときにも判定結果はfalseで、値のみが返ってきました。

コメント

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