Petty CSharp - .?

.?操作符是一种更安全地处理可能为 null 对象的机制，从而避免空指针异常，类似于 TypeScript，Swift 都有类似的机制。

当使用.?时，如果访问对象为 null，则整个表达式为 null 且不抛出异常，否则正常访问。

例子

Copy
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; }
}

如果需要安全访问：

Copy
string city = person?.Address?.City;

此时，如果 person 或 person.Address 为 null，整个表达式都会返回 null，否则它将返回 person.Address.City 的值。这就避免了当 person 或 person.Address 为 null 时，直接访问 person.Address.City 会导致的 NullReferenceException

常用场景

方法调用：

Copy
person.PrintName();

事件处理

Copy
person?.OnNameChanged?.Invoke(this, EventArgs.Empty);

//todo 事件处理

元素访问

Copy
string firstAddress = address?[0]?.City;

// todo ?

和??结合使用同提供默认值

Copy
string city = person?.Address?.City ?? "Unknown";

// todo ??