当前位置:  开发笔记 > 编程语言 > 正文

空传播算子

如何解决《空传播算子》经验,为你挑选了1个好方法。

我已经环顾了一下但是却无法找到新的C#6.0编译器如何分解新的null传播命令的答案,如下所示:

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

我想知道的是它究竟是如何处理这个问题的.

它是否将转换缓存as到一个新DerivedType变量中(即,这只是一个as演员的语法糖,然后是一个空的比较).

或者,如果它实际as投射它,检查null,然后如果不为null,重铸并继续.



1> i3arnon..:

它是否将as演员表缓存到一个新DerivedType变量中(即,这只是as演员的语法糖,然后是空比较).

是.

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

BaseType myObj = new DerivedType();
DerivedType temp = myObj as DerivedType;
string myString = temp != null ? temp.DerivedSpecificProperty : null;

您可以通过此TryRoslyn示例看到(但是,正如hvd所评论的那样,通过查看IL,您可以看到实际上没有DerivedType变量.引用只是存储在堆栈中).

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有