如何从另一个类获取调用方法的名称

本文关键字:方法 调用 获取 另一个 | 更新日期: 2023-09-27 18:31:54

我为Selenium WebDriver编写了一个接口类,其中包括一个异常处理程序,用于在重新抛出异常之前记录一些诊断信息。如果我有启动硒操作的方法的名称,以后诊断问题会更容易。如何获取对接口类进行第一次调用的方法的名称?

如何从另一个类获取调用方法的名称

如果您使用的是VS 2012,最好的选择是使用CallerMemberNameAttribute。 这将导致编译器在编译时填写方法名称,因为不涉及开销。

但是,您需要将其添加到方法调用中:

 void YourMethod(string yourFirstArg, [CallerMemberName] string callingMethodName = "")
 {
     //..

请注意,您也可以使用 StackTraceStackFrame ,但这些都涉及相当多的额外开销。

使用

System.Diagnostics 对象可以获取堆栈跟踪,然后使用 linq 可以找到最近添加的未在当前类中声明的帧。 请注意,JIT 编译器可能会在代码优化期间内联堆栈中的某些方法,这会降低其用处。

new System.Diagnostics.StackTrace(1, false).GetFrames().First(f => f.GetMethod().DeclaringType != System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).GetMethod().Name