C# 从linq表达式中提取方法名
如何获取从C#中的表达式调用的第一个方法的名称?类似于下面虚构的MethodUtils.NameFromExpression()的内容:C# 从linq表达式中提取方法名,c#,linq,lambda,C#,Linq,Lambda,如何获取从C#中的表达式调用的第一个方法的名称?类似于下面虚构的MethodUtils.NameFromExpression()的内容: expr=s=>s.Trim(); arenequal(“Trim”,MethodUtils.NameFromExpression(expr)); 理想情况下,任何util方法的编写/重载方式都可以使其接受任何Action或Func委托类型的表达式 提前谢谢 更新 我找到了一个答案(如下),但仍希望了解这是否是一个好的解决方案,或者BCL中是否已经存在这样做
expr=s=>s.Trim();
arenequal(“Trim”,MethodUtils.NameFromExpression(expr));
理想情况下,任何util方法的编写/重载方式都可以使其接受任何Action或Func委托类型的表达式
提前谢谢
更新
我找到了一个答案(如下),但仍希望了解这是否是一个好的解决方案,或者BCL中是否已经存在这样做的方法。使用调试器进行了一些挖掘,我回答了自己的问题:
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;
}
}
对此实施有何评论?正是我要建议的!“对此实施有何评论?”==>请查看我在HTH的答案。。
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;
}
}