如何获取调用方法名称?

Cha*_*hah 2 .net c# visual-studio-2010 envdte

有没有办法获得C#方法的所有调用者,即:

public string Caller(string str)
{      
  Customer cust = new Customer();
  cust.Firstname = "Peter";
  cust.LastName = "Beamer";
  string t = getName(cust);
  return t;
}

private string getName(Customer customer)
{
  return customer.Firstname +" "+ customer.LastName;
}
Run Code Online (Sandbox Code Playgroud)

会回来的:来电者.

我现在可以得到的是使用EnvDTE.CodeFunction的方法正文.也许有一种更好的方法来实现它,而不是试图解析这段代码.

注意:我不想获取当前方法的调用方法名称.我希望如果我给出方法的名称然后它将返回传递方法的调用方法名称.

Kam*_*ski 6

new StackFrame(1, true).GetMethod().Name
Run Code Online (Sandbox Code Playgroud)

请注意,在发布版本中,编译器可能会内联被调用的方法,在这种情况下,上面的代码将返回调用者的调用者,因此为了安全起见,您应该使用以下方法修饰您的方法:

[MethodImpl(MethodImplOptions.NoInlining)]
Run Code Online (Sandbox Code Playgroud)

来源:https://stackoverflow.com/a/1310148/1714342

  • 请注意性能影响.不要在生产代码中使用它.如果您认为自己确实需要它,请查看PostSharp (4认同)

Tim*_*Tim 5

不太肯定我理解你在问什么,因为似乎没有人确定应该返回“Caller”什么......但是,也许这CallerMemberNameAttribute可能会有所帮助?