首页 > 解决方案 > 如何获取包含调用当前方法的方法的类的名称?

问题描述

我有一个要求,我需要知道类的名称(ApiController),该类有一个方法(GetMethod ),该方法由另一个类( OtherClass )的另一个方法(OtherMethod)调用。

为了帮助解释这一点,我希望下面的伪代码片段有所帮助。

ApiController.cs

public class ApiController
{
    public void GetMethod()
    {
        OtherMethod();
    }
}

其他类.cs

public class OtherClass()
{
    public void OtherMethod()
    {
        Console.WriteLine(/*I want to get the value 'ApiController' to print out*/)
    }
}

我试过的:

标签: c#

解决方案


using System.Diagnostics;

var className = new StackFrame(1).GetMethod().DeclaringType.Name;

到 Stack 的上一层,找到方法,并从方法中获取类型。这避免了您需要创建一个完整的 StackTrace,这很昂贵。

FullName如果你想要完全限定的类名,你可以使用。

编辑:边缘案例(突出以下评论中提出的问题)

  1. 如果启用了编译优化,调用方法可能是内联的,所以你可能得不到你期望的值。(来源:约翰博特
  2. async方法被编译到状态机中,所以同样,你可能不会得到你所期望的。(信用:菲尔K

推荐阅读