.?
操作符是一種更安全地處理可能為 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 ??