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