extracting method name from linq expression
How can I get the name of the first method called from an expression in C#? Something like the fictional MethodUtils.NameFromExp开发者_运维百科ression() below:
Expression<Action<string>> expr = s => s.Trim();
Assert.AreEqual("Trim", MethodUtils.NameFromExpression(expr));
Ideally any util method would be written/overloaded in such a way that it could take expressions for any of the Action or Func delegate types.
Thanks in advance.
UPDATE
I found an answer (below) but would still like input as to whether this is a good solution or whether there already exists a way of doing this in the BCL.
A bit of digging with the debugger and I've answered my own question:
public static class MethodUtils
{
public static string NameFromExpression(LambdaExpression expression)
{
MethodCallExpression callExpression =
expression.Body as MethodCallExpression;
if(callExpression == null)
{
throw new Exception("expression must be a MethodCallExpression");
}
return callExpression.Method.Name;
}
}
Any comments on this implementation?
精彩评论