.?
操作符是一种更安全地处理可能为 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 ??