代码之家  ›  专栏  ›  技术社区  ›  anchandra

.NET十进制。求反vs乘以-1

  •  9
  • anchandra  · 技术社区  · 16 年前

    两者之间有什么区别吗 decimal.Negate(myDecimal) 和 myDecimal * -1 (除了可读性)?

    4 回复  |  直到 16 年前
        1
  •  18
  •   Jon Skeet    16 年前

    我怀疑 Negate 存在是因为有一元减号运算符( op_UnaryNegation

    所以与其拿它和 myDecimal * -1 把它看作是一种另类的写作方式或许会有所帮助 -myDecimal .

        2
  •  7
  •   atamanroman    16 年前

    如果使用.NET Reflector查看.NET源代码,您将看到以下内容: (喝咖啡,直到最后开张……)

    public static decimal Negate(decimal d)
    {
        return new decimal(d.lo, d.mid, d.hi, d.flags ^ -2147483648);
    }
    

    如果您使用*-1,它会将其映射到以下调用:

    FCallMultiply(ref result, yourNumber, -1M);
    

    可能会产生不同的IL代码。

        3
  •  2
  •   Jonathan Rupp    16 年前

    我个人觉得 -myDecimal

    如果没有,我会选择否定,因为我喜欢避免代码中的幻数,而 -1 正如我们所使用的,并没有一个真正的魔法数字,乍一看确实像一个。

        4
  •  0
  •   Oded    16 年前

    来自MSDN, decimal.Negate :

    尽管可读性很重要,但实际上并没有什么不同。

    推荐文章