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

时间:2013-09-18 17:34:36

标签: c# testing reflection selenium

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

2 个答案:

答案 0 :(得分:3)

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

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

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

请注意,您也可以使用StackTraceStackFrame,但这些会产生相当多的额外开销。

答案 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