C#:对象的 Null 条件运算符的 Return

C# : Return of Null-Conditional Operator for Objects

假设我有以下 class :

class Class1
{
    public string MyProp { get; set; }
}

那么,让我们来做个小测试:

Class1 myClass1 = null;
Console.WriteLine(myClass1?.MyProp ?? "Ohoh"); // Print "Ohoh"
Console.WriteLine(myClass1.MyProp ?? "Ohoh");  // Null Exception

"myClass1?." 的 return 的类型是什么?
为什么我打印了 "Ohoh"?

谢谢。

(.?) 用于在执行成员访问之前测试空值。它 returns null 如果在访问之前检查 null 说操作数为 null

??运算符 returns 如果左操作数不为空,则为右操作数;如果左操作数为空,则为右操作数

因此,在第二行检查 null 失败,(.?) operator returns null 和 ??运算符 returns 右操作数。

在第三行中,您尝试访问 属性 而不检查 null,并且出现空引用异常