Jon*_*eet 17
我怀疑Negate存在是因为有一元减号运算符(op_UnaryNegation),并且最好使用表示等效功能的方法,以便不支持运算符重载的语言仍然可以实现相同的结果.
因此,与其进行比较myDecimal * -1可能有助于将其视为另一种写作方式-myDecimal.
(我相信它也是优化的 - 考虑到浮点的工作方式,否定一个值比正常的乘法简单得多;只需要翻转一点.不需要执行任何实际的算术.)
如果您使用.NET Reflector查看.NET源代码,您将看到以下内容:( 获取咖啡直到它最终打开..)
public static decimal Negate(decimal d)
{
return new decimal(d.lo, d.mid, d.hi, d.flags ^ -2147483648);
}
Run Code Online (Sandbox Code Playgroud)
由于十进制内部的工作方式,看起来这是一种奇特的说法-1.
如果你执行*-1,它会将它映射到以下调用:
FCallMultiply(ref result, yourNumber, -1M);
Run Code Online (Sandbox Code Playgroud)
这可能会产生不同的IL代码.