Comment créer une expression LINQ pour appeler une méthode?

c# dynamic-language-runtime expression-trees linq

Question

J'ai un peu joué avec le DLR et je suis un peu coincé sur les méthodes d'appel. Par exemple, supposons que je veuille créer une expression pour mettre quelque chose sur une pile:

class StackInfo{

    protected Stack<SomeClass> _stack;

    public Expression Push(SomeClass item)
    {
        MethodInfo mi = _stack.GetType().GetMethod("Push");
        return Expression.Call(_stack, mi, item);
    }
}

Je suis bloqué parce que je ne sais pas vraiment comment obtenir une expression en pile ou en objet. Quelqu'un pourrait-il me pousser dans la bonne direction?

Réponse acceptée

Utilisez la méthode de fabrique Expression.Constant :

class StackInfo
{
    protected Stack<SomeClass> _stack;

    public Expression Push(SomeClass item)
    {
        MethodInfo mi = _stack.GetType().GetMethod("Push");

        return Expression.Call(Expression.Constant(_stack), mi, Expression.Constant(item));
    }
}


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