回答
new StackFrame(1, true).GetMethod().Name
注意,在發佈版本的編譯器可能會內聯該方法被調用,在這種情況下,上面的代碼將返回調用程序的調用程序,因此爲了安全起見你應該裝點你的方法:
[MethodImpl(MethodImplOptions.NoInlining)]
請注意,以這種方式走棧會帶來相當重的性能影響。我強烈建議在使用之前尋找一種不涉及堆棧散步的解決方案。 – jrista 2009-08-21 05:01:12
由於提到了MethodImpl屬性,所以此答案實際上比重複問題中的答案要好。 – 2009-08-29 16:35:33
我知道這是一個騙局,標籤爲.net 3.5,但爲了幫助那些第一次遇到這種情況的人(像我一樣),最好在你的回答中指出,在C#5.0中你現在可以使用所描述的調用者信息在:http://visualstudiomagazine.com/articles/2012/11/01/more-than-just-async.aspx – acarlon 2013-09-13 02:46:28
這將讓你,你是在方法的名字:
string currentMethod = System.Reflection.MethodBase.GetCurrentMethod().Name;
使用謹慎,因爲有可能是一個性能命中。
To get callers:
StackTrace trace = new StackTrace();
int caller = 1;
StackFrame frame = trace.GetFrame(caller);
string callerName = frame.GetMethod().Name;
這使用堆棧散步來獲取方法名稱。調用者的價值是調用堆棧走多遠。小心不要走遠。
- 1. 獲取類的名字調用函數
- 2. JavaScript - 獲取調用函數的名稱
- 3. 從C++調用函數調用函數名
- 4. v8:無法在函數調用中獲取調用函數名稱
- 5. Azure函數 - 如何從函數內部獲取調用ID?
- 6. RhinoMocks - 調用函數的獲取參數
- 7. 獲取使用GDB調用的函數
- 8. 從javascript中的其他命名函數調用命名函數
- 9. 從調用堆棧獲取函數名稱
- 10. 調用匿名函數
- 11. 從函數指針獲取函數名?
- 12. 從函數名獲取內置函數
- 13. 從函數的函數調用javascript中
- 14. 從函數內部調用Python函數
- 15. 無法從函數調用函數Python
- 16. 從函數內部調用函數?
- 17. 可通過命令調用的函數獲取調用次數
- 18. R:從命名空間調用函數
- 19. 函數調用函數javascript
- 20. 調用JBoss MBean函數來獲取threaddump
- 21. 獲取結構調用函數
- 22. 點擊獲取函數調用時
- 23. 如何從node.js中的調用函數訪問調用函數?
- 24. 調用從設備函數調用device_vector
- 25. 調用函數
- 26. 調用函數
- 27. 調用函數
- 28. 調用函數
- 29. 調用函數
- 30. 調用函數
重複http://stackoverflow.com/questions/171970/how-can-i-find-the-method-that-called-the-current-method – 2009-08-21 05:00:02
這是一個騙局,但可能值得保持開放到不同的術語 - 可能有助於搜索人員。 – Keith 2009-08-21 13:27:08
@Keith:是的,出於這個原因,我們通常會盡量避免重複問題,當他們以一種截然不同的方式被問到 - 這就是爲什麼關閉它們會自動在頂部添加鏈接的原因,以便未來的搜索者可以找到方法答案更快。 – Shog9 2009-08-21 18:28:08