提取作为操作参数传递的方法的名称

Extract the name of a method passed as an action parameter

我在 C# 中有一个主要方法 ExecuteMethod,它负责执行作为参数传递的方法。现在我想做一个日志到一个文件,以便知道每次正在执行哪个方法(我只对获取方法名称感兴趣):

    public static void ExecuteMethod(Action myMethod)
    {
        ExecuteMethod(() => { myMethod(); return true; });
    }

    public static object ExecuteMethod(Func<object> myMethod)
    {
        string myMethodName = <method_name>; // How to extract method name here from myMethod parameter?
        MyLog.Write("Calling to " + myMethodName);

        // more stuff here
    }

例如,在我的程序中有如下调用:

    public void m1()
    {
        ExecuteMethod(() => myCore.SomeMethod1(param1, param2));
    }

    public void m2()
    {
        ExecuteMethod(() => myCore.SomeMethod2(param1, param2, null));
    }

然后从上面的 ExecuteMethod 中,我想获取作为参数传递的这些方法的名称,在本例中为 SomeMethod1 和 SomeMethod2。我怎样才能做到这一点?

快速查看 Action 属性显示 Action.Method.Name,但它报告的名称是一个 运行-time 构造,并没有说明太多。在您的情况下,它可能会报告类似 <m1>b__2_0.

的内容

您可以通过在调用 ExecuteMethod 时传递方法名称来解决此问题:

ExecuteMethod(() => myCore.SomeMethod1(param1, param2), nameof(myCore.SomeMethod1));

并使用它:

public static object ExecuteMethod(Func<object> myMethod, string methodName)
{        
    MyLog.Write("Calling to " + methodName);

    // more stuff here
}