c# - 从操作中获取方法名称

标签 c# c#-4.0

是否可以从 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/

相关文章:

c# - 如何计算 c#/Code review 中两点之间的小时数

c# - C#中的Null引用异常

.net - 演示如何在 C# 4.0 中使用新的 "dynamic"关键字

c#-4.0 - 如何告诉nunit-console在Mono下使用4.0?

c# - 虽然想要创建 SIFTDetector : Get an Attempted to read or write protected memory exception Error 的实例

c# - 在 C# 中动态调用方法的选项

c# - Linq:双值列表 - 后继值之间的差异

c# - 在 .Net 中构建 Web 服务的首选方法是什么?

javascript - 如何在ASP.NET中动态添加数据库数据到Jquery控件?

asp.net-mvc - 从基本页面在不同 Controller 之间保留数据