我已经环顾了一下但是却无法找到新的C#6.0编译器如何分解新的null传播命令的答案,如下所示:
BaseType myObj = new DerivedType(); string myString = (myObj as DerivedType)?.DerivedSpecificProperty;
我想知道的是它究竟是如何处理这个问题的.
它是否将转换缓存as
到一个新DerivedType
变量中(即,这只是一个as
演员的语法糖,然后是一个空的比较).
或者,如果它实际as
投射它,检查null,然后如果不为null,重铸并继续.
它是否将
as
演员表缓存到一个新DerivedType
变量中(即,这只是as
演员的语法糖,然后是空比较).
是.
您的代码将编译为以下内容:
BaseType myObj = new DerivedType(); DerivedType temp = myObj as DerivedType; string myString = temp != null ? temp.DerivedSpecificProperty : null;
您可以通过此TryRoslyn示例看到(但是,正如hvd所评论的那样,通过查看IL,您可以看到实际上没有DerivedType
变量.引用只是存储在堆栈中).