.?
演算子は、null オブジェクトを安全に処理するメカニズムであり、空のポインタ例外を回避するためのものであり、TypeScript や Swift などに類似したメカニズムがあります。
.?
を使用すると、アクセスしようとするオブジェクトが null の場合、式全体が null となり例外がスローされず、それ以外の場合は通常通りアクセスされます。
例#
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string City { get; set; }
public string Street { get; set; }
}
安全なアクセスが必要な場合:
string city = person?.Address?.City;
この場合、person または person.Address が null の場合、式全体が null を返し、それ以外の場合は person.Address.City の値を返します。これにより、person または person.Address が null の場合に、直接 person.Address.City にアクセスすることによって発生する NullReferenceException が回避されます。
一般的な使用例#
- メソッドの呼び出し:
person.PrintName();
- イベント処理
person?.OnNameChanged?.Invoke(this, EventArgs.Empty);
//todo イベント処理
- 要素へのアクセス
string firstAddress = address?[0]?.City;
// todo ?
??
と組み合わせてデフォルト値を提供する
string city = person?.Address?.City ?? "Unknown";
// todo ??