有没有办法获得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 获取方法正文。也许有更好的方法来实现它,而不是尝试解析这段代码。
注意:我不想获取当前方法的调用方法名称。我希望如果我给出方法的名称,那么它将返回传递方法的调用方法名称。
答案 0 :(得分:6)
new StackFrame(1, true).GetMethod().Name
请注意,在发布版本中,编译器可能会内联被调用的方法,在这种情况下,上面的代码将返回调用者的调用者,因此为了安全起见,您应该用以下方法修饰您的方法:
[MethodImpl(MethodImplOptions.NoInlining)]
答案 1 :(得分:4)
虽然wudzik指出使用StackFrame
肯定可以做到这一点,但为什么还需要这样做呢?
这是一种设计气味。如果您的代码必须了解其调用者,那么您的设计就会出现问题。每个这样的依赖都应该从你的类模型中抽象出来。
答案 2 :(得分:4)
不是很积极我明白你在问什么,因为似乎没有人确定什么应该返回“来电者”...但是,也许CallerMemberNameAttribute
可能会有所帮助?