C#中是否有某些函数可以让我计算忽略运算符的顺序?我的意思是2 + 6 / 2
结果为4
而不是5
。
答案 0 :(得分:3)
即使您尝试重载这些运算符,也不会改变优先级。许多编程语言(包括C#)使用的优先级符合数学中常用的顺序,
作为大卫mentioned,这不仅仅是关于C#。它也是Mathematics。我不认为在C#中这是可能的,除了编写自己的数学运算符(这对我来说听起来极其困难和复杂)。
用户定义的运算符实现始终优先于 预定义的运算符实现:仅在不适用时 预定义的用户定义的运算符实现将存在 算术运算实现。
用户定义的运算符声明无法修改语法, 优先级,或运营商的关联性。例如,/ 运算符始终是二元运算符,始终具有优先级 在Section 7.2.1中指定,并且始终是左关联的。
答案 1 :(得分:0)
由于C#内置了值整数类型,因此无法修改其行为。你为什么要这么做?您可以使用括号来确定优先级,例如: (2 + 6)/ 2
答案 2 :(得分:0)
鉴于您无法覆盖c#运算符的优先行为,我将创建自己的表达式计算器。
根据您的问题,我相信您的表达始终为number
operator
number
并输出number
因此,您可以选择上一个number
并使用以下operator
number
进行处理,依此类推......
我想到了两种不同的方法:
System.Linq.Expressions.Expression
获取并从此处解析尽管如此,我很想听听你为什么需要这样的行为。这是学术上的吗?
答案 3 :(得分:0)
运算符重载不允许您更改运算符优先级。为了达到你想要的效果,你需要为数学表达式实现自己的解析器。仅支持数字0-9和4运算符(+, - ,*,/)并不太难,但如果您以前从未编写过解析器,则会很费时间。有很多关于在互联网上编写编译器的教程;他们会教你如何编写一个简单的标记化器,然后教你如何解释标记流。在您的情况下,您只需要处理数字和运算符,这使得这项工作比实现整个语言容易得多。
编辑:实际上,编写一个忽略运算符优先级的解析器实际上比实现BODMAS容易得多。