Search code examples
c#linqexpression-treesdynamic-language-runtime

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


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?


Solution

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