c# - 乘法赋值运算符不尊重数学优先级
问题描述
例如:
//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# 的事实):
Public Int32 =*(Int32 lhs , Int32 rhs)
{
//Using the above values
Return (10*15) + 12;
}
...然后有这个代码:
Int32 value = 10;
value =* 15 + 12;
...调用=*
将设置lhs
为10
,但它必须设置rhs
为 的结果15 + 12
。
这将与内置*=
运算符的行为相同。
推荐阅读
- python - 使用 Client.map() “不能腌制未打开读取的文件”
- sql - SSIS - 加载位于 SQL Server 表中的 CSV 文件
- php - 关联字段“AppBundle\Entity\ChequeosRevision#$idrevision”的“AppBundle\Entity\InfoRevision”类型的预期值,改为“整数”
- r - find a match for a string in a vector of regular expressions
- java - Kotlin 的 Coroutines 与 Android 中 Java 的 Executor 有何不同?
- c - C、Valgrind free 因为大分配而没有任何 malloc
- java - 如何显示android默认浏览器名称和版本?
- regex - 正则表达式选择一些字符,除了双引号内的字符
- c - 需要帮助按天打印排序文件
- sql - SSIS 数据流任务 - 在消息过滤器内调用是非法的。(来自 HRESULT 的异常:0x8001005...)