正如标题所说,我有一个局部变量,我们可以将其称为 myComponent
这是单一行为的一种。嗯,确实是myOtherComponent.myComponent
,但是myOtherComponent
Start()
之后从未改变所以我不明白它如何改变任何东西,特别是因为以下是我对代码进行的唯一更改:
var g = myComponent?.gameObject;
if(g != null) { /* sometimes does: */ Destroy(myComponent); }
else { /* sometimes does: */ myComponent = Instantiate(); }
“MissingReferenceException:‘BlockPreview’类型的对象已被销毁,但您仍在尝试访问它。
您的脚本应该检查它是否为空,或者您不应该销毁该对象。 [然后有一个直接链接到var g
线。]”
但是当我将该代码更改为:
var g = myComponent == null ? null : myComponent.gameObject;
if(g != null) { /* sometimes does: */ Destroy(myComponent); }
else { /* sometimes does: */ myComponent = Instantiate(); }
没有错误。它工作得很好。
但据我所知(刚刚用谷歌搜索),那么 myComponent?.gameObject
实际上只是 myComponent == null ? null : myComponent.gameObject
的简写.
我知道我可以写得更好,比如替换 myOtherComponent
中的变量来自MyComponent
输入 GameObject
例如,我想知道为什么会发生这种情况,以避免将来发生这种情况。虽然,这看起来像是 Unity 中的一个错误,但我不知道。
最佳答案
Unity官方支持响应
UnityEngine.Object and those who inherit it, do not support null conditional operator. The Docs are updated to reflect this
关于c# - "var g = myComponent?.gameObject"给出错误,但 "var g = myComponent == null ? null : myComponent.gameObject"没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58065049/