c# - "var g = myComponent?.gameObject" 给出错误,但 "var g = myComponent == null ? null : myComponent.gameObject" 没有
问题描述
正如标题所说,我有一个局部变量,我们可以称之为myComponent
Monobehaviour 的一种。好吧,它确实是,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(); }
没有错误。它工作得很好。
但据我所知(并且只是用谷歌搜索),thenmyComponent?.gameObject
只是myComponent == null ? null : myComponent.gameObject
.
我知道我可以写得更好,例如将变量myOtherComponent
从一个MyComponent
类型替换为一个GameObject
类型,但我想知道为什么会发生这种情况以避免将来发生这种情况。虽然,它几乎看起来像 Unity 中的一个错误,但我不知道。
解决方案
官方 Unity 支持响应
UnityEngine.Object 及其继承者不支持空条件运算符。文档已更新以反映这一点
推荐阅读
- sql - 选择具有条件 SQL 的唯一行
- python - 如何在 Elasticsearch Kibana 中内置的 Python 脚本中成功编写和运行 SQL 查询?
- sql - 加入同一张桌子以获得2个不同的金额值
- react-native - 尝试在反应本机的空对象引用上调用虚拟方法“int android.graphics.bitmap.getwidth()”
- list - 比较Java中的两个HashMap
- sql - 如何正确使用 UPDATE JOIN?
- java - Java PriorityQueue + 类
- html - CSS - 用省略号隐藏段落溢出
- r - 对 unique() 行为感到困惑
- css - 如何按比例缩放图像网格以保持布局比例