从linq表达式中提取方法名称

chi*_*tom 6 c# linq lambda

如何从C#中的表达式获取第一个方法的名称?类似下面的虚构MethodUtils.NameFromExpression():

Expression<Action<string>> expr = s => s.Trim();
Assert.AreEqual("Trim", MethodUtils.NameFromExpression(expr));
Run Code Online (Sandbox Code Playgroud)

理想情况下,任何util方法都将以这样一种方式编写/重载,即它可以为任何Action或Func委托类型提供表达式.

提前致谢.

UPDATE

我找到了答案(下面),但仍然想知道这是否是一个好的解决方案,或者是否已经存在在BCL中执行此操作的方法.

chi*_*tom 10

用调试器挖掘一下,我回答了我自己的问题:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

对此实施有何评论?