2

有没有办法让所有 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的方法正文。也许有比尝试解析此代码更好的方法来实现它。

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

4

3 回答 3

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

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

[MethodImpl(MethodImplOptions.NoInlining)]

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

于 2013-07-09T12:59:20.730 回答
5

不是很肯定我明白你在问什么,因为似乎没有人确定应该返回“来电者”......但是,也许这CallerMemberNameAttribute可能会有所帮助?

于 2013-07-09T13:08:32.783 回答
4

虽然使用StackFramewudzik 指出的方法当然可以做到这一点,但为什么需要这样做呢?

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

于 2013-07-09T13:06:40.507 回答