代码之家  ›  专栏  ›  技术社区  ›  chillitom Cee McSharpface

从linq表达式中提取方法名

  •  6
  • chillitom Cee McSharpface  · 技术社区  · 14 年前

    如何从c_中的表达式获取第一个调用的方法的名称?有点像虚构的 methodUtils.nameFromExpression() 以下:

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

    理想情况下,任何util方法的编写/重载方式都可以使其为任何action或func委托类型采用表达式。

    提前谢谢。

    更新

    我找到了一个答案(如下),但仍希望输入是否这是一个好的解决方案,或是否已经存在这样做的方式在bcl。

    1 回复  |  直到 14 年前
        1
  •  10
  •   casperOne    14 年前

    在调试器的帮助下,我回答了自己的问题:

    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;
        }
    }
    

    对此实施有何评论?