Если вы посмотрите на источник .NET с помощью .NET Reflector, вы увидите следующее:
(получая кофе, пока он наконец не откроется ..)
public static decimal Negate(decimal d)
{
return new decimal(d.lo, d.mid, d.hi, d.flags ^ -2147483648);
}
Похоже, это причудливый способ сказать -1 из-за того, как работает десятичная дробь внутри.
Если вы сделаете * -1, он отобразит его на следующий вызов:
FCallMultiply(ref result, yourNumber, -1M);
, который, скорее всего, даст другой код IL.