Dot-Net

是否有一個 .NET 函式可以讓我比較兩個運算符的優先級?

  • August 10, 2014

.NET Framework 中是否有一種類型可以比較兩個運算符並確定一個運算符的優先級是否低於另一個運算符?暫時我已經IComparer<ExpressionType>為我感興趣的運算元實現了一個形式為

實現是微不足道的,並且對編譯器/解釋器實現者俱有一般用途,這使我認為存在通用實用程序函式。或者,如果存在用於獲取給定運算符的序數的庫函式,則實現這樣的比較器也是微不足道的。

不,沒有,你已經提到了原因(強調我的):

我已經IComparer<ExpressionType>為我感興趣的運算符實現了一個函式,並使用C# 語言的運算符類別圖表。

運算符重載優先級是特定於語言的細節。基類庫 (BCL) 和 CLR 與語言無關,它們支持多種語言,所有語言都可以為運算符優先級提供自己的順序。

即使他們提供了一種可以在任何語言中使用的方法來指示運算符重載優先級是什麼,當您用語言 A(優先級為 P A)編寫程式碼然後使用語言 B (優先級為 P B )?

你會得到不一致的結果。

這就是為什麼它是在語言級別而不是 BCL/CLR 級別上確定的;沒有可能的方法可以跨語言一致地做到這一點,考慮到您可以從多種語言訪問庫,如果他們可以或嘗試過,這甚至可能沒有意義。

如果您要實現這樣的事情,我建議您包含語言標識符並確保運算符優先級的比較與語言相關聯。當方法/庫在所有語言中使用時,這是保證結果一致的唯一方法。

引用自:https://stackoverflow.com/questions/12250719