C#,创建(方法?)表达式并调用它
我对c#expression还不太熟悉。我上过类似的课C#,创建(方法?)表达式并调用它,c#,expression,C#,Expression,我对c#expression还不太熟悉。我上过类似的课 class SimpleClass { private string ReturnString(string InputString) { return "result is: "+InputString; } public string Return(Expression exp) { LambdaExpression lambda = Expression.Lam
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);
谢谢你的帮助/回答
Matt最好尽早执行
exp
签名-即作为表达式
或:
SimpleClass sc=newsimpleclass();
Expression=Expression.Call(
Expression.Constant(sc),//目标对象
“ReturnString”,//方法名称
null,//泛型类型参数
Expression.Constant(“hello world”)//方法参数
);
var lambda=Expression.lambda(表达式);
字符串结果=sc.Return(lambda);
控制台写入线(结果);
当然,委托用法(
Func
)在许多情况下都可能同样有效。如果您的目标是学习表达式,那就好了。但是,如果您的目标是完成这项特定任务,那么a将是解决此问题的更合适的方法。这取决于这是否是性能瓶颈,使用缓存的编译表达式比反射调用()快得多
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);