我有一行代码:Rigidbody rigidbody = go.GetComponent<Rigidbody>() ? go.GetComponent<Rigidbody>() : go.AddComponent(typeof(Rigidbody)) as Rigidbody;
其中go
是一个游戏对象。当我试图简化这个使用短路评估Rigidbody rigidbody = go.GetComponent<Rigidbody>() || go.AddComponent(typeof(Rigidbody)) as Rigidbody;
它给出了错误CS0029: Cannot implicitly convert type 'bool' to 'UnityEngine.Rigidbody'
。
我在这里做的短路评估不正确吗?有没有可能用短路来做这个,或者我必须用我的更长的解决方案。
任何帮助或建议都是感激的。谢谢。
2条答案
按热度按时间kkih6yb81#
您在这里描述的场景是Unity还提供
TryGetComponent<T>(out T component)
的原因。您可以像这样使用它:
这可以保护您免受Unity对象在某些条件下显示为非空的奇怪情况的影响,并满足Unity工程师要求您不要使用空条件/合并运算符的要求。
amrnrhlw2#
好吧,我忘记了null coalescing,这正是我正在寻找的解决方案。我的注意力集中在JavaScript上,在JavaScript中,短路求值的行为类似于空合并,但C#没有这样的概念。
本质上,我的问题是使用
||
而不是??
。