我已经看了一下但是还没有找到新的C#6.0编译器如何分解新的null传播命令的答案,如下所示:
BaseType myObj = new DerivedType();
string myString = (myObj as DerivedType)?.DerivedSpecificProperty;
我想知道的是它究竟是如何处理的。
是否将as
强制转换为新的DerivedType
变量(即,这只是as
强制转换的语法糖,后跟空值比较。)
或者如果它实际上as
投了它,检查是否为null,然后如果不为null,则重新运行并继续。
答案 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;
变量。引用只是存储在堆栈中)