C#(If <或If>)vs Math.Sign

Myt*_*ics 9 c# math if-statement sign

可能是一个愚蠢的问题,但有没有理由使用Math.Sign?

使用Math.Sign而不仅仅使用if语句是否存在速度/优化问题?也许只是最佳实践/代码可读性偏好?

if (rayDirX < 0) 
    stepX = -1; 
else 
    stepX = 1;

//----------

stepX = (rayDirX < 0) ? (-1) : (1);

//----------

stepX = Math.Sign(rayDirX);
Run Code Online (Sandbox Code Playgroud)

jus*_*ase 5

我怀疑是否存在功能差异或性能差异(如果有的话),但 Math.Sign 版本更加明显直接。特别是在您的示例中,未声明 rayDirX 的类型。但这非常微妙,我不会批评你使用其中任何一个。

编辑:

另一件事是,上面的示例有一个小错误。在 Math.Sign 的情况下0将返回0。以下是 Math.Sign 框架之外的反编译代码:

public static int Sign(int value)
{
  if (value < 0)
  {
    return -1;
  }
  if (value > 0)
  {
    return 1;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)