是否可以从 Action 中获取方法名称?我知道我总是可以传递一个字符串,但我希望有一些更聪明的东西。
public bool DeviceCommand(Action apiCall)
{
//It would be nice to log the method name that was passed in
try
{
apiCall();
}
catch (Exception exc)
{
LogException(exc);
return false;
}
return true;
}
用法看起来像这样:
void MyMethod()
(
DeviceCommand(() => api.WriteConfig(config));
)
最佳答案
是的,有:Action.Method.Name
但是,这仅在您将 Action 参数作为方法组而不是 lambda 表达式传递时有效:
class Program
{
static void SomeActionName(){}
static void Main(string[] args)
{
LogMethodName(() => SomeActionName()); // <Main>b__0
LogMethodName(SomeActionName); // SomeActionName
var instance = new SomeClass();
LogMethodName(() => instance.SomeClassMethod());; // <Main>b__1
LogMethodName(instance.SomeClassMethod); // SomeClassMethod
}
private static void LogMethodName(Action action)
{
Console.WriteLine(action.Method.Name);
}
}
class SomeClass
{
public void SomeClassMethod(){}
}
关于c# - 从操作中获取方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5364520/