banner
Matrix

Matrix

Abyss
email
github

Petty CSharp - .?

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。