使用Linq传递一个方法

本文关键字:一个 方法 Linq 使用 | 更新日期: 2023-09-27 18:06:19

是否可以将表达式发送给方法,获取方法名称并执行表达式并返回结果?

的想法:
internal T Execute<T>(Expression expr)
{
    // Get method name and the parameters from the expression.
    // Check the methodname+parameters against the db
    // Execute the expression and return T
    return Expression.Execute(expr);
}

调用看起来像这样:

Expression<Func<string, string, Guid>> myExpression2 = (a, b) => PostMessage(a, b, 1);
return Execute<Guid>(myExpression2);

调用也将有不同的返回类型,在本例中是一个guid。这将允许我检查execute方法中的表达式方法,并确定是否需要一些额外的日志记录,或者是否需要额外的身份验证。

表达式总是调用一个方法,如PostMessage, GetMessages或类似的

使用Linq传递一个方法

是有可能的。表达式是一种语法树。你可以浏览它并从中提取你需要的信息。如果它总是以您期望的形式出现(总是一个方法调用),对您来说就容易多了。你只需要寻找一个MethodCallExpression http://msdn.microsoft.com/en-us/library/system.linq.expressions.methodcallexpression.aspx

MSDN有一个关于如何做到这一点的很好的例子(好吧,他们也修改了树:对你来说,它会更简单,因为你只需要阅读它并验证它,如果我理解正确的话)这里:http://msdn.microsoft.com/en-us/library/bb546136.aspx