📜  c# 获取调用方法名称 - C# (1)

📅  最后修改于: 2023-12-03 14:59:43.519000             🧑  作者: Mango

C# 获取调用方法名称

在 C# 中,我们可以使用一些方法来获取当前调用方法的名称。在本文中,我们将讨论三种不同的方法:

  1. 使用 MethodInfo 类型的 GetCurrentMethod() 方法
  2. 使用 StackTrace 类型的 GetFrame() 方法
  3. 使用 CallerMemberName 属性
使用 MethodInfo.GetCurrentMethod() 方法

MethodInfo 类型是 .NET Framework 中的一个类型,它包含了程序集、类及其成员的详细信息。GetCurrentMethod() 方法可以获取当前调用方法的 MethodInfo 对象,我们可以通过 Name 属性来获取方法名称。这种方法需要使用反射,性能消耗较高。请看下面的代码片段:

using System.Reflection;

public class MyClass
{
    public void MyMethod()
    {
        MethodBase method = MethodBase.GetCurrentMethod();
        string methodName = method.Name;
        Console.WriteLine("当前调用方法名称:" + methodName);
    }
}
使用 StackTrace.GetFrame() 方法

StackTrace 类型用于获取当前执行路径上的堆栈信息。通过 StackTrace 类型的 GetFrame() 方法可以获取当前调用方法的 StackFrame 对象,我们可以通过 GetMethod() 方法获取方法名称。这种方法需要查看调用堆栈,性能消耗也较高。请看下面的代码片段:

using System.Diagnostics;

public class MyClass
{
    public void MyMethod()
    {
        StackFrame frame = new StackFrame(1);
        MethodBase method = frame.GetMethod();
        string methodName = method.Name;
        Console.WriteLine("当前调用方法名称:" + methodName);
    }
}
使用 CallerMemberName 属性

C# 5.0 引入了 CallerMemberName 属性,它可以在编译时获取当前调用方法的名称。这种方法不需要使用反射,也不需要查看堆栈,是最高效的方法。请看下面的代码片段:

public class MyClass
{
    public void MyMethod([CallerMemberName] string methodName = "")
    {
        Console.WriteLine("当前调用方法名称:" + methodName);
    }
}

以上就是获取当前调用方法名称的三种方法。根据具体的使用场景来选择适当的方法,以达到最优的性能和效果。