C# 获取调用方方法的名称

C# 获取调用方方法的名称,c#,C#,假设我正在调用GetMethodB,它作为参数传递给GetmethodA和GetMethodAA。如何获取调用GetMethodB的这些方法的名称 ClassName.GetMethodA(GetMethodB()); ClassName.GetMethodAA(GetMethodB()); 使用堆叠框架 var sf = new StackTrace().GetFrame(1); var callingMethodName = sf.GetMethod().Name; 无法执行此操作:在调

假设我正在调用GetMethodB,它作为参数传递给GetmethodA和GetMethodAA。如何获取调用GetMethodB的这些方法的名称

ClassName.GetMethodA(GetMethodB());
ClassName.GetMethodAA(GetMethodB());
使用堆叠框架

var sf = new StackTrace().GetFrame(1);
var callingMethodName = sf.GetMethod().Name;

无法执行此操作:在调用GetMethodB时,GetMethodA和GetMethodAA均未处于活动状态

调用序列如下所示:

您的方法调用GetMethodB,并获取其结果 您的方法调用GetMethodA。。。将GetMethodB调用的结果传递给它 您的方法再次调用GetMethodB,并获取其结果 您的方法调用GetMethodAA。。。将第二个GetMethodB调用的结果传递给它 在这两种情况下,GetMethodB的调用方都是您当前的方法,调用是从该方法完成的


如果GetMethodB需要知道它的调用者,那么您应该显式地标识方法的调用者-例如,通过传递枚举或字符串参数。

这两个方法是通过GetMethodB的结果调用的,因此GetMethodB的调用者与getmethodA和/或getmethodAA的调用者相同。 您无法找到将另一个方法的结果传递给哪个方法

所以第一个getMethodB被调用, 结果被捕获 并传递给其他方法。
调用堆栈或任何其他技巧在这里都没有帮助。

为什么需要这样做?你想实现什么?实际上我需要一个GetMethodA和GetMethodAA的名字,从GetMethodB里面。希望这能解决我的问题。不,这根本不能解决你的问题。我怀疑你试图过度设计一个复杂的解决方案来解决一个本来不应该存在的问题。但因为我们不知道你到底想做什么,我怀疑这里的任何人都能帮上忙。根据给出的信息,我建议您向方法签名添加一个字符串参数,并通过该参数传入方法的名称。比如:GetMEthodAGetMethodBGetMethodA@David,我正在读取具有相同扩展名的文件。一个目录中只有两个文件。第一个文件包含关于其他内容的信息,第二个文件包含关于其他内容的信息。因此,根据GetMethodB从何处获得调用,我将返回正在读取的路径。基于此,我有了不同的实现。这听起来像是一个令人惊讶的破坏性设计。这会给他提供他展示的代码所定义的方法,但这不是他说的他想要的。此外,这会根据代码是调试还是发布而产生截然不同的结果。调用者可能会被优化掉。如果他从GetMethodA中调用GetMethodB,这似乎是他想要做的,它应该会产生GetMethodA。它从执行堆栈中获取调用方法的名称,我也这么认为,但是Kevin没有将委托传递给GetMethodA,以便从内部执行。他首先执行GetMethodB,并将返回值作为参数传递给GetMethodA。是的,堆栈跟踪对解决此问题没有帮助。他已尝试将其他字符串参数传递给GetMethodBindex,system.Reflection.MethodBase.GetCurrentMethod。Name@SantoshThapa您错过了答案的要点:您无法自动执行,因为通话时上下文不可用。您需要类似ClassName.GetMethodAGetMethodBGetMethodA的东西-即告诉GetMethodB其结果将在GetMethodA中使用。