Gibt es in .NET Framework einen Typ, der zwei Operatoren vergleicht und feststellt, ob eine niedrigere Priorität als eine andere Priorität hat? Zur Zeit habe ich eine Funktion in Form von IComparer<ExpressionType>
für die Betreiber, an denen ich interessiert bin, implementiert, und zwar unter Verwendung der Operator-Kategorie-Diagramm für die C # -Sprache.
Die Implementation ist trivial und für Compiler / Interpreter-Implementationen von allgemeinem Nutzen, was mich zu der Annahme bringt, dass eine allgemeine Utility-Funktion existiert. Alternativ wäre es auch trivial, einen solchen Vergleich zu implementieren, wenn eine Bibliotheksfunktion existiert, um die Ordnungszahl eines gegebenen Operators zu erhalten.
Nein, es gibt keinen, und Sie haben warum erwähnt (Betonung meiner):
Ich habe eine Funktion in Form von
IComparer<ExpressionType>
implementiert, für die Betreiber, die ich interessiere, und durch die Verwendung des Betreibers Kategoriendiagramm für die C # -Sprache .
Vorrang für Operatorüberladung ist ein sprachspezifisches -Detail. Die Basisklassenbibliotheken (BCL) und die CLR sind sprachunabhängig, sie unterstützen viele Sprachen, von denen alle ihre eigene Reihenfolge für die Vorrangstellung des Operators angeben können.
Und selbst wenn sie eine Methode anbieten würden, die in any verwendet werden kann, um anzuzeigen, wie der Vorrang der Operatorüberladung wäre, was passiert, wenn Sie Code in Sprache A (mit der Priorität P A) schreiben ) und dann mit der Sprache B (mit der Priorität P B ) konsumieren?
Sie würden inkonsistente Ergebnisse erhalten.
Aus diesem Grund ist es auf der Sprachebene bestimmt, und nicht auf der Ebene BCL / CLR; Es gibt einfach keine Möglichkeit, dies konsistent über mehrere Sprachen hinweg zu tun, und es macht möglicherweise keinen Sinn, ob sie es könnten oder versuchen, vorausgesetzt, dass Sie aus mehreren Sprachen auf die Bibliothek zugreifen können.
Wenn Sie so etwas implementieren möchten, empfehle ich Ihnen, eine Sprachkennung anzugeben und sicherzustellen, dass Vergleiche der Rangfolge der Operatoren mit der Sprache verknüpft sind. Nur so können konsistente Ergebnisse garantiert werden, wenn die Methode / Bibliothek über alle Sprachen hinweg verwendet wird.
Tags und Links .net expression-trees operator-precedence