来自http://www.csharp-examples.net/reflection-calling-method-name/
using System.Diagnostics; // get call stack StackTrace stackTrace = new StackTrace(); // get calling method name Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
我认为在发布版本中你不能依赖于此,因为jit编译器可以优化代码,因此名称可能不同. (7认同)
这就是(1)的用途.您必须使用[MethodImpl(MethodImplOptions.NoInlining)]来确保您的方法不被内联. (5认同)
是的,但是应该避免出于调试或记录之外的任何原因提取堆栈跟踪.这可能会导致糟糕的表现. (5认同)
John Saunder.. 7
你几乎肯定不想这样做.呼叫者永远不应该知道谁在呼叫它.相反,两个调用者之间的差异应该被抽象为一个参数,并传递给被调用的方法:
private void doSomething(bool doItThisWay) { if (doItThisWay) { // Do it one way } else { // Do it the other way } } private void method1() { doSomething(true); } private void method2() { doSomething(false); }
这样,如果你添加一个方法3,它可以以某种方式做某事,而doSomething也不会关心.
来自http://www.csharp-examples.net/reflection-calling-method-name/
using System.Diagnostics; // get call stack StackTrace stackTrace = new StackTrace(); // get calling method name Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
你几乎肯定不想这样做.呼叫者永远不应该知道谁在呼叫它.相反,两个调用者之间的差异应该被抽象为一个参数,并传递给被调用的方法:
private void doSomething(bool doItThisWay) { if (doItThisWay) { // Do it one way } else { // Do it the other way } } private void method1() { doSomething(true); } private void method2() { doSomething(false); }
这样,如果你添加一个方法3,它可以以某种方式做某事,而doSomething也不会关心.