是否有.NET函数可以让我比较两个运算符的优先级?

时间:2012-09-03 15:34:54

标签: .net expression-trees operator-precedence

.NET Framework中是否有一种类型可以比较两个运算符并确定其优先级是否低于另一个运算符?目前,我已经为IComparer<ExpressionType>形式实现了一个函数,我感兴趣的运算符,以及{C#语言的operator category chart

implementation是微不足道的,并且通常用于编译器/解释器实现者,这使我认为存在一般的效用函数。或者,如果存在一个库函数来获取给定运算符的序数,那么实现这样的比较器也是微不足道的。

1 个答案:

答案 0 :(得分:4)

不,没有,你已经提到了为什么(强调我的):

  

我已经以IComparer<ExpressionType>的形式实现了一个函数,   对于我感兴趣的运营商,以及使用运营商   类别图表用于C#语言

运算符重载优先级是特定于语言的详细信息。基类库(BCL)和CLR是语言无关的,它们支持许多语言,所有这些语言都可以提供自己的运算符优先顺序。

即使他们提供了一种在任何语言中使用的方法来指示运算符重载优先级将是什么,当你用语言A编写代码时会发生什么(优先级为P A )然后用语言B(优先级P B )消费它?

你会得到不一致的结果。

这就是为什么它在语言层面决定,而不是在BCL / CLR层面;没有可能的方法在语言中一致地做到这一点,如果他们可以或尝试你可以从多种语言访问库,它甚至可能没有意义。

如果您要实现这样的功能,我建议您包含语言标识符,并确保运算符优先级的比较与语言相关联。这是在所有语言中使用方法/库时保证一致结果的唯一方法。