C# 查找函数调用程序

C# 查找函数调用程序,c#,C#,我有这样的C#函数: private void test(){} 有没有办法找到函数的调用者或调用者? 例如: private void Caller(){ test(); } 那么,我如何理解调用方调用了测试呢?请参见调用方中的参数,该参数在方法调用测试时会有所不同。例如,当从调用方调用测试时,使用测试(1)当从另一个函数调用时,比如从另一个调用方调用测试(2)可以使用字符串参数进行测试 private void test(string whoCalled){} 如果在呼叫者中 pri

我有这样的C#函数:

private void test(){}
有没有办法找到函数的调用者或调用者?
例如:

private void Caller(){
test();
}

那么,我如何理解调用方调用了测试呢?

请参见调用方中的参数,该参数在方法调用测试时会有所不同。例如,当从调用方调用测试时,使用测试(1)当从另一个函数调用时,比如从另一个调用方调用测试(2)

可以使用字符串参数进行测试

private void test(string whoCalled){}
如果在呼叫者中

private void Caller() {
    test("Caller");
}

您可以从调用堆栈中获取方法的名称

当您调用一个函数时,名称也作为其他信息被推送到调用堆栈,以便程序知道如何从该函数调用返回。您可以使用该信息获取调用test()函数的上一个函数

要获取stacktrace,可以使用以下命令:

StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();

Console.WriteLine(stackFrames[1].GetMethod().Name);    

您是指Visual Studio的“查找所有引用”吗?或者,您在运行时是否在进行关联?如果您的逻辑依赖于调用方,那么它应该是类上的另一个方法。他们绝对是不同的行为。如果您想要调试跟踪或其他东西,请使用StackTrace trace=new StackTrace();你一定要看看@TheSuperTramp(+1 BTW)提供的链接。无论你做什么,都要用所有可能的方法进行彻底的测试。在很多情况下,这很可能会影响您,即调试和发布版本的行为可能会有所不同,而调试可能是另一种体验。请参阅和添加到其中的注释以供进一步参考。tarkrl的观点很好!这只是一种快速获取方法名称的方法。我不建议在任何生产代码中使用它。例如,如果更改方法名称会发生什么情况?不要问我:)我曾经尝试使用此方法,但出现了调试/发布版本问题,此后我从未使用过它。还有其他更可靠的方法来实现所需。但每次我看到这种问题,我都会指向Jon Skeet的答案,因为这很好地概括了它。