C#后备价值

时间:2018-05-17 14:54:07

标签: c# unity3d

在javascript中,您可以使用||运算符实际上具有回退值,因此如果前面的语句返回falsey值,则使用||之后的值。

所以,例如,如果GetComponent返回null,那么我们默认为Vector2.zero

Vector3 velocity = GetComponent<Rigidbody2D>().velocity || Vector2.zero;

有写简写的方法吗?因为上面我得到了:

  

运营商&#39; ||&#39;不能应用于类型&#39; Vector2&#39;的操作数和&#39; Vector2&#39;

2 个答案:

答案 0 :(得分:5)

在C#4中,

Vector3 velocity;
var comp = GetComponent<Rigidbody2D>();

if (comp != null)
    velocity = comp.velocity;
else
    velocity = Vector2.zero;

也可以尝试使用此版本查看是否有效。它更好,如果comp.velocityVector2,我希望它会。但我不认识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)。