如何从C#中的表达式获取第一个方法的名称?下面是虚构的 MethodUtils.NameFromExpression()之类的东西:
Expression<Action<string>> expr = s => s.Trim();
Assert.AreEqual("Trim", MethodUtils.NameFromExpression(expr));
理想情况下,任何util方法都将以这样一种方式编写/重载,即它可以为任何Action或Func委托类型提供表达式。
提前致谢。
更新
我找到了答案(如下),但仍然想知道这是否是一个好的解决方案,或者是否已经存在在BCL中执行此操作的方法。
答案 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;
}
}
对此实施有何评论?