8

.NET Framework 中是否有一种类型可以比较两个运算符并确定一个运算符的优先级是否低于另一个运算符?暂时我已经IComparer<ExpressionType>为我感兴趣的算子实现了一个形式为

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

4

1 回答 1

4

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

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

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

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

你会得到不一致的结果。

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

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

于 2012-09-08T14:25:43.597 回答