Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从linq表达式中提取方法名_C#_Linq_Lambda - Fatal编程技术网

C# 从linq表达式中提取方法名

C# 从linq表达式中提取方法名,c#,linq,lambda,C#,Linq,Lambda,如何获取从C#中的表达式调用的第一个方法的名称?类似于下面虚构的MethodUtils.NameFromExpression()的内容: expr=s=>s.Trim(); arenequal(“Trim”,MethodUtils.NameFromExpression(expr)); 理想情况下,任何util方法的编写/重载方式都可以使其接受任何Action或Func委托类型的表达式 提前谢谢 更新 我找到了一个答案(如下),但仍希望了解这是否是一个好的解决方案,或者BCL中是否已经存在这样做

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

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