我四处张望,但找不到新的C#6.0编译器如何分解新的null传播命令的答案,例如:

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

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

是否将as强制转换缓存到新的DerivedType变量中(即,这只是as强制转换的语法糖,然后进行空比较)。

或者,如果它实际上是as强制转换的,则检查是否为null,如果不为null,则重铸并继续进行。

最佳答案



是的。

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

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

您可以通过this TryRoslyn example看到它(不过,正如hvd所评论的那样,通过查看IL,您可以发现实际上并没有DerivedType变量。该引用只是存储在堆栈中)。

关于c# - 空传播算子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34601091/

10-12 13:39