C#,创建(方法?)表达式并调用它

标签 c# expression

我真的是 c# 表达式的新手。我有一些类似的类(class)

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

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

现在,我想用一些参数(伪)调用此方法 Return,如下所示:

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

感谢您的帮助/回答。

马特

最佳答案

最好执行 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);

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

关于C#,创建(方法?)表达式并调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322618/

相关文章:

delphi - 三重等式表达式求值

css - 使用类似 “input[class~=”的有效“&& type =“checkbox”]?

C++ 值在常量表达式中不可用

c# - 如何使列表项值不引用对象

c# 线程和等待表单

c# - 如何使用 SignalR Hubs 处理并发

php - 正向前瞻正则表达式令人困惑

C# 成员表达式 Func<T,object> 到 Func<T,bool> MethodBinaryExpression

c# - 基于 XML 的验证框架跨语言

c# - 从 SQL Server 的事务日志中删除信息