How do I make a LINQ expression to call a method?

c# dynamic-language-runtime expression-trees linq

Question

I've been playing around with the DLR a bit and am a bit stuck on calling methods. For example, suppose I want to make an expression to push something onto a stack:

class StackInfo{

    protected Stack<SomeClass> _stack;

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

I'm getting stuck because I'm not really sure how to get an Expression out of _stack or item. Could somebody push me in the right direction?

Accepted Answer

Use the Expression.Constant factory method:

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));
    }
}



Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why