Null 条件演算子を使えば条件文を減らせるので便利ですが、ちょっと注意するべき点もあるので、挙動の確認を行いました。
基本
例えば以下のようなクラスがあった場合。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
以下のコードは null
が出力されます。
Person person = null;
Console.WriteLine($"Name:{person?.Name}");
実行結果
Name:
Null 条件演算子がなければ例外が発生します。
条件文での使用
if 文
以下のように条件文で使用した場合、null
と数値との比較になるので、結果は false
になります。
Person person = null;
if(person?.Age >= 0)
{
Console.WriteLine($"0 以上");
}
else if(person?.Age <= 0)
{
Console.WriteLine($"0 以下");
}
else
{
Console.WriteLine($"false");
}
実行結果
false
switch 文
Person person = null;
switch (person?.Age)
{
case null:
Console.WriteLine($"null");
break;
default:
Console.WriteLine($"数値");
break;
}
実行結果
null
値の代入
Null 条件演算子の戻り値は Null 許容型となるため、以下はビルドに失敗します。
// ビルドエラー
Person person = null;
int age = person?.Age;
// ビルドは通るが例外が発生する
Person person = null;
int age = (int)person?.Age;
// これは OK
Person person = null;
int? age = person?.Age;
または、 Null 条件演算子を使ってメンバーへの代入はできません。
// ビルドエラー
Person person = null;
person?.Age = 10;