如何从另一个类获取调用方法的名称
本文关键字:方法 调用 获取 另一个 | 更新日期: 2023-09-27 18:31:54
我为Selenium WebDriver编写了一个接口类,其中包括一个异常处理程序,用于在重新抛出异常之前记录一些诊断信息。如果我有启动硒操作的方法的名称,以后诊断问题会更容易。如何获取对接口类进行第一次调用的方法的名称?
如果您使用的是VS 2012,最好的选择是使用CallerMemberNameAttribute。 这将导致编译器在编译时填写方法名称,因为不涉及开销。
但是,您需要将其添加到方法调用中:
void YourMethod(string yourFirstArg, [CallerMemberName] string callingMethodName = "")
{
//..
请注意,您也可以使用 StackTrace
和 StackFrame
,但这些都涉及相当多的额外开销。
使用
System.Diagnostics 对象可以获取堆栈跟踪,然后使用 linq 可以找到最近添加的未在当前类中声明的帧。 请注意,JIT 编译器可能会在代码优化期间内联堆栈中的某些方法,这会降低其用处。
new System.Diagnostics.StackTrace(1, false).GetFrames().First(f => f.GetMethod().DeclaringType != System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).GetMethod().Name