如何获取调用方方法名称

本文关键字:方法 方方法 调用 获取 何获取 | 更新日期: 2023-09-27 18:21:43

有没有一种方法可以获取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;
}

会返回:呼叫者。

我现在所能得到的只是使用EnvDTE.CodeFunction的方法体文本。也许有比解析此代码更好的方法来实现它。

注意:我不想得到当前方法的调用方法名称。我希望如果我给出方法的名称,那么它将返回传递的方法的调用方法名称

如何获取调用方方法名称

new StackFrame(1, true).GetMethod().Name

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

[MethodImpl(MethodImplOptions.NoInlining)]

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

不是很肯定我理解你的要求,因为似乎没有人确定应该返回什么"Caller"。。。但是,也许CallerMemberNameAttribute可能会有所帮助?

正如wudzik所指出的,使用StackFrame当然是可能的,但为什么需要这样做?

这是一种设计气味。如果你的代码必须了解它的调用者,那么你的设计就出了问题。每个这样的依赖项都应该从类模型中抽象出来。