可能是一个愚蠢的问题,但是有什么理由使用Math.Sign吗?
使用Math.Sign而不是仅使用if语句是否可以实现速度/优化?也许只是最佳实践/代码可读性的偏爱?
if (rayDirX < 0)
stepX = -1;
else
stepX = 1;
//----------
stepX = (rayDirX < 0) ? (-1) : (1);
//----------
stepX = Math.Sign(rayDirX);
最佳答案
我怀疑功能上的差异或性能差异是否很大,但Math.Sign版本明显更直观。尤其是在您的示例中未声明rayDirX的类型。但这非常微妙,我不会批评您使用这两种方法。
编辑:
还有一件事,您上面的示例有一个小错误。对于0
,Math.Sign将返回0
。这是Math.Sign框架之外的反编译代码:
public static int Sign(int value)
{
if (value < 0)
{
return -1;
}
if (value > 0)
{
return 1;
}
return 0;
}
关于C#(If <或If>)vs Math.Sign,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9672908/