-2

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

4

2 回答 2

3

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

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

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

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

于 2013-09-18T17:36:03.473 回答
-1

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

new System.Diagnostics.StackTrace(1, false).GetFrames().First(f => f.GetMethod().DeclaringType != System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).GetMethod().Name
于 2013-09-18T17:34:35.983 回答