检索的呼吁方法的名称从内一个方法[重复]
-
03-07-2019 - |
题
可能的重复:
我怎么能找到方法,称目前的方法?
我有一个方法中的一个对象,从一些地点内对象。有没有快的和容易的方式获得姓名的方法,称这种流行的方法。
伪码的例子:
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
, 不去界定一个参数或传递的信息你真正想要的。(或者放在一个基类或东西...)