2016-06-08 40 views
0

空,条件运算符的返回比方说,我有下面的类:C#:对于对象

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?”。“ ?
为什么打印“Ohoh”?

谢谢。

回答

1

(。?)用于在执行成员访问之前测试null。如果在访问sayd之前检查空操作数为null,则返回null

??如果它不为null,则返回左操作数;如果为0,则返回右操作数。

因此,在第二行检查null失败,(。?)操作符返回null,并返回?操作符返回右操作数。

在第三行

你尝试没有检查空访问属性,你有空引用异常

+0

你说:“(?)运算符返回null”。然后,如果它返回null,.MyProp应该抛出一个异常。但在这里,它不会抛出任何东西。 – zizou

+0

Oups,好的。 我犯了一个错误,你是对的。 这是“myClass1?.MyProp”,它返回null,而不是“”myClass1 ?.“。 – zizou