Come faccio a fare un'espressione LINQ per chiamare un metodo?

c# dynamic-language-runtime expression-trees linq

Domanda

Ho giocato un po 'con il DLR e sono un po' bloccato sui metodi di chiamata. Ad esempio, supponiamo di voler fare un'espressione per inserire qualcosa in una pila:

class StackInfo{

    protected Stack<SomeClass> _stack;

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

Mi sto bloccando perché non sono proprio sicuro di come estrarre un'espressione da _stack o da un oggetto. Qualcuno potrebbe spingermi nella giusta direzione?

Risposta accettata

Utilizza il metodo 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));
    }
}


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché