这个a?.XX()是什么?

空条件运算符(null-conditional operator)`?.` 用于在访问对象成员(属性、方法、索引器等)之前检查对象是否为 `null`。如果对象为 `null`,则整个表达式的结果为 `null` 或 `default`,并且不会引发 `NullReferenceException`。

以下是一个完整的控制台应用程序示例,演示如何使用空条件运算符 `?.`:

```csharp
using System;

namespace NullConditionalOperatorDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = null;
            Console.WriteLine("Using null-conditional operator:");

            // 使用空条件运算符访问属性
            string name = person?.Name;
            Console.WriteLine($"Name: {name ?? "null"}"); // 如果 person 为 null,则 name 为 null

            // 使用空条件运算符调用方法
            person?.DisplayGreeting();

            // 赋值一个对象后再次使用空条件运算符
            person = new Person { Name = "Alice" };
            name = person?.Name;
            Console.WriteLine($"Name: {name}");

            person?.DisplayGreeting();
        }
    }

    class Person
    {
        public string Name { get; set; }

        public void DisplayGreeting()
        {
            Console.WriteLine($"Hello, my name is {Name}.");
        }
    }
}
```

### 解释

1. **`Person` 类**:
    - 包含一个 `Name` 属性和一个 `DisplayGreeting` 方法,用于打印问候信息。

2. **`Main` 方法**:
    - 定义一个 `Person` 类型的变量 `person` 并将其初始化为 `null`。
    - 使用空条件运算符访问 `person` 的 `Name` 属性。如果 `person` 为 `null`,则 `name` 也为 `null`。使用 `??` 运算符确保输出时不会显示 `null`,而是显示字符串 `"null"`。
    - 使用空条件运算符调用 `person` 的 `DisplayGreeting` 方法。如果 `person` 为 `null`,则不会调用该方法。
    - 将 `person` 赋值为一个新的 `Person` 对象,并再次使用空条件运算符访问 `Name` 属性和调用 `DisplayGreeting` 方法。

### 示例运行结果

```
Using null-conditional operator:
Name: null
Name: Alice
Hello, my name is Alice.
```

### 关键点总结
- 当 `person` 为 `null` 时,使用 `person?.Name` 不会引发 `NullReferenceException`,而是返回 `null`。
- 使用 `person?.DisplayGreeting()` 调用方法时,如果 `person` 为 `null`,方法不会被调用。
- 空条件运算符 `?.` 提供了一种简洁且安全的方式来处理可能为 `null` 的对象成员访问。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值