Wie erstellt man benutzerdefinierte System.Linq.Expression-Klassen in C #?

c# expression-trees

Frage

Ist es möglich, benutzerdefinierte Expression-Klassen zu erstellen? Wenn ja, hat jemand Beispiele? Das Vererben von der Framework-Expression-Klasse stellt ein Problem dar, da ihr Konstruktor einen ExpressionType-Parameter akzeptiert, der ein Framework-Enum-Typ ist - ich kann das offensichtlich nicht anpassen!

Irgendwelche Ideen?

Expertenantwort

Genau das musste der DLR-Code auf Codeplex tun; Am Ende haben sie die gesamte Codebasis in einem anderen Namensraum (IIRC) neu erstellt, bis 4.0 ausgeliefert wird.

Dies spielt nicht unbedingt gut mit dem C # -Compiler; Ich habe es ehrlich gesagt nicht versucht.


Beliebte Antwort

Mit .net 3.5 können Sie dies nicht tun, da der Expression-Konstruktor einen ExpressionType-Enumerationswert einnimmt und Sie der Enumeration keine neuen Knotentypen hinzufügen können.

Sie können einen vorhandenen Knotentyp auch nicht überladen, da Sie von keiner der "Leaf-Klassen" (wie BinaryExpression) erben können, da sie alle versiegelt sind.

Laut den MSDN-Dokumenten scheint es, als ob Sie dies in CLR v4 tun können, solange Sie die Methode "Reduce" überschreiben und einen Knotentyp ExpressionType.Extension verwenden.




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum