2011-08-23 52 views
0

是否有可能向表达式发送方法,获取方法名称并执行表达式并返回结果?使用Linq来传入方法

的想法:

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或类似的。

回答

2

是的,这是可能的。表达式是一种语法树。你可以走它并从中提取你需要的信息。如果它始终处于您期望的形式(始终只有一个方法调用),那对您来说会更容易。 你只需要寻找一个MethodCallExpression http://msdn.microsoft.com/en-us/library/system.linq.expressions.methodcallexpression.aspx

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