提取作为操作参数传递的方法的名称
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
}
我在 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
}