在.NET 4.5/C#5中,这很简单:
public void PopularMethod([CallerMemberName] string caller = null) { // look at caller }
该编译器自动将来电者的姓名; 所以:
void Foo() { PopularMethod(); }
会传入"Foo"
.
在.NET 4.5/C#5中,这很简单:
public void PopularMethod([CallerMemberName] string caller = null) { // look at caller }
该编译器自动将来电者的姓名; 所以:
void Foo() { PopularMethod(); }
会传入"Foo"
.
我不认为没有跟踪堆栈就可以完成.但是,这样做很简单:
StackTrace stackTrace = new StackTrace(); MethodBase methodBase = stackTrace.GetFrame(1).GetMethod(); Console.WriteLine(methodBase.Name); // e.g.
但是,我认为你真的必须停下来问自己是否有必要.
这其实很简单.
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) { }
国际海事组织:如果它对事件来说足够好,它应该足够好了.