在javascript中,您可以使用||
运算符实际上具有回退值,因此如果前面的语句返回falsey值,则使用||
之后的值。
所以,例如,如果GetComponent
返回null,那么我们默认为Vector2.zero
Vector3 velocity = GetComponent<Rigidbody2D>().velocity || Vector2.zero;
有写简写的方法吗?因为上面我得到了:
运营商&#39; ||&#39;不能应用于类型&#39; Vector2&#39;的操作数和&#39; Vector2&#39;
答案 0 :(得分:5)
在C#4中,
Vector3 velocity;
var comp = GetComponent<Rigidbody2D>();
if (comp != null)
velocity = comp.velocity;
else
velocity = Vector2.zero;
也可以尝试使用此版本查看是否有效。它更好,如果comp.velocity
是Vector2
,我希望它会。但我不认识Unity,所以试试吧。
var comp = GetComponent<Rigidbody2D>();
Vector3 velocity = (comp == null) ? Vector2.zero : comp.velocity;
你可以看到为什么?.
运营商在将它添加到语言中时会遇到如此大声的hosannas。
答案 1 :(得分:4)
当然,您可以使用:
Vector3 velocity = GetComponent<Rigidbody2D>()?.velocity ?? Vector2.zero;
?.
运算符确保如果GetComponent<Rigidbody2D>()
返回null
,则.velocity
未解析且整个语句为空。
接下来,??
运算符返回左侧的值(GetComponent<Rigidbody2D>()?.velocity
),如果它不是null
,并且左侧的值是null
则返回右侧的值(Velocity2.zero
)。