views:

164

answers:

1

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?

+2  A: 

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));
    }
}
Bryan Watts
Hrm.... It seems so simple when you put it that way. :-)
Jason Baker
Sometimes it just takes another set of eyes.
Bryan Watts