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

时间:2010-02-12 15:19:40

标签: c# linq lambda

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

Expression<Action<string>> expr = s => s.Trim();
Assert.AreEqual("Trim", MethodUtils.NameFromExpression(expr));

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

提前致谢。

更新

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

1 个答案:

答案 0 :(得分: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;
    }
}

对此实施有何评论?

相关问题