如何创建LINQ表达式来调用方法?

时间:2009-05-26 23:44:23

标签: c# linq expression-trees dynamic-language-runtime

我一直在玩DLR,并且在调用方法时有点困惑。例如,假设我想创建一个表达式来将某些内容推送到堆栈中:

class StackInfo{

    protected Stack<SomeClass> _stack;

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

我陷入困境,因为我不确定如何从_stack或item中获取Expression。有人能把我推向正确的方向吗?

1 个答案:

答案 0 :(得分:3)

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