我真的是 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/