C#の”?”(クエスチョンマーク)は、主にnull許容型や条件演算子に使用され、コードの安全性や可読性を向上させる。ここでは、”?”がどのように使われるかを具体例とともに解説する。
“?”は、値型変数がnull値を持てるようにするために使用される。通常の値型(int
、bool
など)はnullを許容しないが、int?
やbool?
のように”?”を付けると、nullを許容できるようになる。
csharpint? age = null; // nullを許容するint型
if (age.HasValue)
{
Console.WriteLine($"Age: {age.Value}");
}
else
{
Console.WriteLine("Age is unknown");
}
この場合、age
がnullの場合にはHasValue
がfalseを返し、nullでない場合にはage.Value
を使って値にアクセスできる。
null条件演算子?.
は、オブジェクトがnullかどうかを確認しつつ、メンバーやメソッドにアクセスするために使われる。オブジェクトがnullであれば、nullが返され、nullでなければ指定のメンバーやメソッドにアクセスする。
csharpPerson? person = GetPerson();
int? length = person?.Name?.Length; // personがnullでない場合、NameのLengthを取得
Console.WriteLine(length ?? 0); // lengthがnullの場合は0を表示
このコードでは、person
やperson.Name
がnullの場合、null条件演算子によりエラーを避けつつ安全にアクセスしている。
null合体演算子??
は、変数がnullの場合に代替値を提供するために使われる。nullでなければ変数の値を、nullであれば指定したデフォルト値を返す。
csharpstring? name = GetName();
string displayName = name ?? "Unknown"; // nameがnullの場合、"Unknown"を使用
Console.WriteLine(displayName);
この例では、name
がnullであればdisplayName
に”Unknown”が代入され、nullでなければname
の値が代入される。
C# 8.0で導入された??=
演算子は、変数がnullの場合にだけ代入を行う演算子。変数がnullでない場合はそのままの値を保持する。
csharpstring? title = null;
title ??= "Default Title"; // titleがnullなら"Default Title"を代入
Console.WriteLine(title); // 出力: Default Title
このコードでは、title
がnullのときだけ”Default Title”が代入され、nullでない場合は既存の値が維持される。
条件演算子?:
は、条件式がtrueかfalseかに応じて異なる値を返す三項演算子。短い条件分岐で使われ、コードをシンプルにする。
csharpint age = 20;
string category = (age >= 18) ? "Adult" : "Minor"; // ageが18以上なら"Adult"、それ以外は"Minor"
Console.WriteLine(category);
この場合、age
が18以上であればcategory
には”Adult”が、そうでなければ”Minor”が代入される。
C#の”?”は、null許容型の指定やnull条件演算子、null合体演算子など、nullにまつわる操作を簡潔に記述するための強力なツール。また、条件演算子としても使われ、コードの簡略化と可読性向上に役立つ。これらを適切に活用することで、安全で簡潔なC#コードが書けるようになる。