首页 > 解决方案 > 乘法赋值运算符不尊重数学优先级

问题描述

例如:

//Does NOT honor the rules of Math precedence
Int32 value=10;
value*=15 + 12;  //value=170


//Does honor the rules of Math precedence, and does the multiplication on the second line BEFORE the addition
Int32 value=10;
value=value * 15 + 12; //value=162

我希望第一个能正常工作,编译器会先完成*,但它没有。这是意料之中的,因为 * 在赋值运算符的左侧。有什么方法可以创建另一个像 ++ 和 – 运算符一样运行的运算符,有点像这样......</p>

public Int32 =*(Int32 lhs , Int32 rhs)
{
     //Using the above values 
     lhs=lhs*rhs
}

操作和 =* 将在右侧具有 *,因此清楚地指示到达赋值运算符之前的 *。我只是不确定如何在评估 rhs 变量之前将其分解。

任何想法都会有所帮助。

标签: c#.net

解决方案


如果您希望更改运算符的优先级,则您的代码没有意义*=

如果我从这个开始(忽略它不是有效的 C# 的事实):

Public Int32 =*(Int32 lhs , Int32 rhs)
{
     //Using the above values 
     Return (10*15) + 12;
}

...然后有这个代码:

Int32 value = 10;
value =* 15 + 12;

...调用=*将设置lhs10,但它必须设置rhs为 的结果15 + 12

这将与内置*=运算符的行为相同。


推荐阅读