C#,create(method?)表达式并调用它

时间:2009-08-24 14:02:11

标签: c# expression

我是c#表达式的新手。我有类似的课程

class SimpleClass
{
    private string ReturnString(string InputString)
    {
        return "result is: "+InputString;
    }

    public string Return(Expression exp)
    {
        LambdaExpression lambda = Expression.Lambda(exp);
        return lambda.Compile();
    }
}

现在,我想调用这个方法返回一些参数(伪)像这样:

      SimpleClass sc = new SimpleClass();
      Expression expression = Expression.MethodCall(//how to create expression to call SimpleClass.ReturnString with some parameter?);
     string result = sc.Return(expression);
    Console.WriteLine(result);

感谢您的帮助/回答。

马特

2 个答案:

答案 0 :(得分:6)

最好尽早执行exp签名 - 即Expression<Func<string>>

public string Return(Expression<Func<string>> expression)
{
    return expression.Compile()();
}

使用:

SimpleClass sc = new SimpleClass();
string result = sc.Return(() => sc.ReturnString("hello world"));
Console.WriteLine(result);

或:

SimpleClass sc = new SimpleClass();
Expression expression = Expression.Call(
    Expression.Constant(sc),           // target-object
    "ReturnString",                    // method-name
    null,                              // generic type-argments
    Expression.Constant("hello world") // method-arguments
);
var lambda = Expression.Lambda<Func<string>>(expression);
string result = sc.Return(lambda);
Console.WriteLine(result);

当然,委托使用(Func<string>)在许多情况下也可能同样有用。

答案 1 :(得分:3)

如果你的目标是学习表达,那很好。但如果您的目标是完成此特定任务,那么delegate将是解决此问题的更合适的方法。