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

Ste*_*idi 8 .net expression-trees operator-precedence

.NET Framework中是否有一种类型可以比较两个运算符并确定其优先级是否低于另一个运算符?目前,我已经IComparer<ExpressionType>为我感兴趣的运营商实现了一种功能,并使用C#语言的运营商类别图表.

实施是微不足道的,而对于编译器/解释实施者一般使用,导致我认为一般的效用函数存在.或者,如果存在库函数以获得给定运算符的序数,则实现这样的比较器也是微不足道的.

cas*_*One 4

不,没有,你已经提到了原因(强调我的):

IComparer<ExpressionType>我已经为我感兴趣的运算符,并使用 C# 语言的运算符类别图,以 的形式实现了一个函数

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

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

你会得到不一致的结果。

这就是为什么它是在语言级别上确定的,而不是在 BCL/CLR 级别上确定的;没有可能的方法可以跨语言一致地做到这一点,而且考虑到您可以从多种语言访问该库,如果他们可以或尝试这样做,甚至可能没有意义。

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