为什么数学函数中的空合并运算符(??)在没有括号的情况下工作不同?

时间:2013-07-19 15:27:39

标签: function c#-3.0 null-coalescing-operator

您好我对C#中的这个数学函数有疑问,我想知道为什么会发生这种情况。 这两行给出了不同的结果,为什么?

container.price * (1 + (container.tax_rate / 100m)) * (1 - (container.promotion_rate ?? 0 / 100m))

退货 - > -839.9944

container.price * (1 + (container.tax_rate / 100m)) * (1 - ((container.promotion_rate ?? 0) / 100m))

退货 - > 50.99966

该函数的唯一区别是第二个函数的括号:(container.promotion_rate ?? 0)

2 个答案:

答案 0 :(得分:1)

/的优先级高于??

您的第一个表达式被解析为container.promotion_rate ?? (0 / 100m)

答案 1 :(得分:1)

null-coalescing运算符的优先级低于divide运算符。因此,您的代码被解释为

 container.promotion_rate ?? (0 / 100m)

给你一个不同的结果。

MSDN Reference