2012-04-12 10 views
44

thể trùng lặp:
Can you use reflection to find the name of the currently executing method?
C# how to get the name of the current method from codeLàm thế nào để có được tên của chức năng hiện tại?

Ví dụ:

void foo() { 
    Console.Write(__MYNAME__); 
} 

in: foo

i T có thể làm điều đó trong C#?

+0

Trong Net 4.5, bạn có thể sử dụng CallerMemberNameAttribute để có được tên của người gọi. Xem https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx ... Sau đó bạn có thể quấn phần thân của hàm của bạn vào một hàm ẩn danh như trong ([CallerMemberName] string functionName = "") => {}. Các vấn đề với việc sử dụng phương pháp phản xạ như trong câu trả lời được chấp nhận là (1) chức năng có thể được gạch chân, và/hoặc (2) tên hàm có thể bị xáo trộn nếu nó không công khai và mã bị che khuất. – GreatAndPowerfulOz

Trả lời

102

Hãy thử điều này:

System.Reflection.MethodBase.GetCurrentMethod().Name 
+3

Chính xác. Cảm ơn – Jack

+5

Đối với những người sử dụng .Net 4.5, có [CallerMemberNameAttribute] (https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx) –

14

Bạn có thể kiểm tra stack trace

using System.Diagnostics; 

// get call stack 
StackTrace stackTrace = new StackTrace(); 

// get calling method name 
Console.WriteLine(stackTrace.GetFrame(0).GetMethod().Name); 

Nhưng hãy cẩn thận, nếu phương pháp này là inlined bạn có được tên phương pháp cha mẹ.