Je ne suis pas sûr si c'est strictement currying, mais je veux essentiellement réaliser ce qui suit. Étant donné un Expression
:Comment puis-je convertir une expression en une autre expression?
Expression<Func<T1, T2, TResult>> expression
Je veux passer un des arguments et de produire un Expression
correspondant où la valeur de ce paramètre est fixe. L'expression résultante doit être fonctionnellement équivalente à expression
sauf qu'elle doit contenir un paramètre de moins.
Cette expression résultante ressemblerait à quelque chose comme ceci:
Expression<Func<T2, TResult>> curriedExpression;
J'ai essayé, mais cela ne fonctionne pas parce qu'un Expression
ne convertit pas implicitement à une expression lambda:
curriedExpression = b => expression(fixedValueForT1, b);
Notez que curriedExpression
ne doit pas contenir d'appel à expression
; il devrait contenir une logique dupliquée sauf avec la valeur fixe.
J'espère que cela a du sens. Faites-moi savoir si cela est ambigu ou pas bien expliqué.
Merci. Y a-t-il un moyen plus simple qui soit plus proche de la façon dont vous feriez la même chose avec 'Func's? – Sam
Je crains qu'il n'y ait pas de manière plus simple, quand vous travaillez avec des expressions vous devez traiter la structure syntaxique, et c'est toujours une affaire assez compliquée! –