Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个.NET函数可以让我比较两个运算符的优先级?_.net_Expression Trees_Operator Precedence - Fatal编程技术网

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

是否有一个.NET函数可以让我比较两个运算符的优先级?,.net,expression-trees,operator-precedence,.net,Expression Trees,Operator Precedence,.NET Framework中是否有一种类型可以比较两个运算符并确定其中一个运算符的优先级是否低于另一个运算符?目前,我已经以IComparer的形式为我感兴趣的操作符实现了一个函数,并使用了C#语言的 这个函数很简单,对于编译器/解释器实现者来说是通用的,这使我认为存在一个通用的实用函数。或者,如果存在一个库函数来获取给定运算符的序号,那么实现这样的比较器也很简单。不,没有,您已经提到了原因(我的重点): 我以IComparer的形式实现了一个函数, 对于我感兴趣的运算符,以及通过使用运算符

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


这个函数很简单,对于编译器/解释器实现者来说是通用的,这使我认为存在一个通用的实用函数。或者,如果存在一个库函数来获取给定运算符的序号,那么实现这样的比较器也很简单。

不,没有,您已经提到了原因(我的重点):

我以
IComparer
的形式实现了一个函数, 对于我感兴趣的运算符,以及通过使用运算符 C语言的类别图

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

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

你会得到不一致的结果

这就是为什么它取决于语言水平,而不是BCL/CLR水平;没有一种方法可以跨语言一致地执行此操作,而且如果他们可以或尝试使用多种语言访问库,则可能没有意义


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

从技术上讲,优先顺序应该是语言特性,而不是运行时特性(尽管我认为它在大多数语言中非常相似)。但是没有:我不知道有什么内在的原因。@MarcGravel:我也在考虑同样的问题,但我认为运行时会对它提供的运算符强制一些优先级。回想起来,我认为这没有什么意义,因为语言可以自由地按照自己选择的方式将表达式放在堆栈上;运行时不知道原始代码。只是把它扔到这里:也许,只是也许,Roslyn会让你更接近你想要的东西。可能是CSharp编译器中的某个内部方法。(但也许我只是在胡说八道:-P)