gpt4 book ai didi

c# - 空传播运算符

转载 作者:太空狗 更新时间:2023-10-29 21:21:48 25 4
gpt4 key购买 nike

我环顾四周,但未能找到新的 C# 6.0 编译器如何分解新的 null 传播命令的答案,如下所示:

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

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

它是否将 as 转换缓存到一个新的 DerivedType 变量中(即,这只是 as 转换后跟一个空比较)。

或者如果它实际上as 转换它,检查是否为 null,如果不为 null,则重新转换并继续。

最佳答案

Does it cache the as cast into a new DerivedType variable (i.e., this is just syntactic sugar for an as cast followed by an null comparison).

是的。

你的代码将被编译成这样:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com