Wie mache ich einen LINQ-Ausdruck, um eine Methode aufzurufen?

c# dynamic-language-runtime expression-trees linq

Frage

Ich habe ein bisschen mit dem DLR herumgespielt und bin ein wenig auf die Methoden angewiesen. Angenommen, ich möchte einen Ausdruck erstellen, um etwas auf einen Stapel zu schieben:

class StackInfo{

    protected Stack<SomeClass> _stack;

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

Ich stehe fest, weil ich nicht sicher bin, wie ich einen Ausdruck aus Stapel oder Gegenstand herausholen kann. Könnte mich jemand in die richtige Richtung drängen?

Akzeptierte Antwort

Verwenden Sie die Factory-Methode " 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));
    }
}



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