可能的重复:
我怎么能找到方法,称目前的方法?

我有一个方法中的一个对象,从一些地点内对象。有没有快的和容易的方式获得姓名的方法,称这种流行的方法。

伪码的例子:

public Main()
{
     PopularMethod();
}

public ButtonClick(object sender, EventArgs e)
{
     PopularMethod();
}

public Button2Click(object sender, EventArgs e)
{
     PopularMethod();
}

public void PopularMethod()
{
     //Get calling method name
}

PopularMethod() 我想看到的价值 Main 如果它被称为从 Main ...我想看到"ButtonClick"如果 PopularMethod() 被称为从 ButtonClick

我是看着 System.Reflection.MethodBase.GetCurrentMethod() 但是,这不会让我的叫法。我看了看 StackTrace 但我真的不津津乐道运行一个整个堆栈跟踪每一次这种方法被称为。

有帮助吗?

解决方案

我不认为这是可以做到而不跟踪。然而,这是相当简单的做到这一点:

StackTrace stackTrace = new StackTrace();
MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();
Console.WriteLine(methodBase.Name); // e.g.

然而,我认为你真的得停下来问自己,如果这是必要的。

其他提示

中。净额4.5/C#5,这是简单的:

public void PopularMethod([CallerMemberName] string caller = null)
{
     // look at caller
}

编译器 添加的姓名自动;所以:

void Foo() {
    PopularMethod();
}

将通过在 "Foo".

这实际上是非常简单的。

public void PopularMethod()
{
    var currentMethod = System.Reflection.MethodInfo
        .GetCurrentMethod(); // as MethodBase
}

但要小心通过,我有点怀疑,如果内联的方法具有任何效果。你可以这样做,以确保JIT编译器不会得到的方式。

[System.Runtime.CompilerServices.MethodImpl(
 System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
public void PopularMethod()
{
    var currentMethod = System.Reflection.MethodInfo
        .GetCurrentMethod();
}

得到的调用的方法:

[System.Runtime.CompilerServices.MethodImpl(
 System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
public void PopularMethod()
{
    // 1 == skip frames, false = no file info
    var callingMethod = new System.Diagnostics.StackTrace(1, false)
         .GetFrame(0).GetMethod();
}

只有通过在一个参数

public void PopularMethod(object sender)
{

}

国际海事组织:如果它是好的足够的活动应该足够这一点。

我经常发现我的自我想要做到这一点,但必须始终结的重构的设计,我的系统所以我不觉得这"的尾巴摇狗"反模式。结果一直是一个更加稳健的架构。

而你可以最definitley跟踪叠,并找出那样,我敦促你们重新考虑你的设计。如果你的方法需要知道关于某种形式的"国家",我要说的只是创造一枚举或某事,并采取作为一个参数来你PopularMethod().沿着这些线路的东西。基于什么你的张贴,跟踪堆将矫枉过正的海事组织。

我想你不需要使用 StackTrace 类,然后 StackFrame.GetMethod() 在下一个框架。

这似乎是一个奇怪的东西来用 Reflection 对于虽然。如果你确定 PopularMethod, 不去界定一个参数或传递的信息你真正想要的。(或者放在一个基类或东西...)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top