空传播算子

时间:2016-01-04 22:33:22

标签: c# .net c#-6.0

我已经看了一下但是还没有找到新的C#6.0编译器如何分解新的null传播命令的答案,如下所示:

BaseType myObj = new DerivedType();
string myString = (myObj as DerivedType)?.DerivedSpecificProperty;

我想知道的是它究竟是如何处理的。

是否将as强制转换为新的DerivedType变量(即,这只是as强制转换的语法糖,后跟空值比较。)

或者如果它实际上as投了它,检查是否为null,然后如果不为null,则重新运行并继续。

1 个答案:

答案 0 :(得分:8)

  

是否将CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE强制转换为新的as变量(即,这只是DerivedType强制转换的语法糖,后跟空值比较。)

您的代码将编译为以下内容:

as

您可以使用this TryRoslyn example看到(但是,正如hvd所评论的那样,通过查看IL,您可以看到实际上没有BaseType myObj = new DerivedType(); DerivedType temp = myObj as DerivedType; string myString = temp != null ? temp.DerivedSpecificProperty : null; 变量。引用只是存储在堆栈中)