【问题标题】:extracting method name from linq expression从 linq 表达式中提取方法名称
【发布时间】:2010-02-12 15:19:40
【问题描述】:

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

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

理想情况下,任何 util 方法都应该以这样的方式编写/重载,即它可以采用任何 Action 或 Func 委托类型的表达式。

提前致谢。

更新

我找到了答案(如下),但仍想了解这是否是一个好的解决方案,或者 BCL 中是否已经存在这样做的方法。

【问题讨论】:

标签: c# linq lambda


【解决方案1】:

使用调试器进行一些挖掘,我已经回答了我自己的问题:

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

有关于这个实现的 cmets 吗?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多