Comment créer des classes System.Linq.Expression personnalisées en C #?

c# expression-trees

Question

Est-il possible de créer des classes Expression personnalisées? Si oui, quelqu'un a-t-il des exemples? Hériter du framework abstrait La classe Expression pose un problème en ce que son constructeur utilise un paramètre ExpressionType, qui est un type framework - je ne peux évidemment pas le personnaliser!

Des idées?

Réponse d'expert

C'est exactement ce que le code DLR sur codeplex devait faire; à la fin, ils ont recréé l'intégralité de la base de code dans un espace de noms différent (IIRC), jusqu'à la livraison de la version 4.0.

Cela ne joue pas nécessairement bien avec le compilateur C #; Honnêtement, je n'ai pas essayé.


Réponse populaire

Cela ne peut pas être fait avec .net 3.5 car le constructeur Expression prend une valeur enum ExpressionType et vous ne pouvez pas ajouter de nouveaux types de nœuds à l'énum.

Vous ne pouvez pas non plus surcharger un type de nœud existant, car vous ne pouvez pas hériter des "classes feuille" (comme BinaryExpression) car elles sont toutes scellées.

Selon la documentation MSDN, il semble que vous puissiez le faire dans CLR v4, à condition de remplacer la méthode "Réduire" et d'utiliser un type de nœud ExpressionType.Extension.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi