2015-12-08 20 views
9

Tôi muốn có tên của Trình xử lý hiện tại đang được gọi.Lấy Tên Phương thức Hiện tại

MethodInfo.GetCurrentMethod().Name hoặc MethodBase.GetCurrentMethod().Name hoạt động tốt trong chế độ gỡ lỗi.

Nhưng một khi tôi làm xáo trộn (sử dụng confuserEx) dự án của tôi, 2 hàm trả về "System.Reflection.MethodBase()".

tôi đã nhận thấy tôi có thể có được tên của chức năng của tôi bằng cách sử dụng dòng sau: ((RoutedEventHandler)this.MyMethodName).GetMethodInfo().Name

Nó trả "MyMethodName" mà là kết quả mong đợi.

Nhưng nó không phải là chung chung. Tôi muốn một đoạn mã hoạt động khi tôi không biết tên của phương thức hiện tại.

+1

có thể trùng lặp của [C# làm thế nào để có được tên của phương pháp hiện tại từ code] (http://stackoverflow.com/question/2652460/c-sharp-how-to-get-the-name-of-the-current-phương pháp-từ-mã) –

+0

Nếu không có gì khác giúp, các giải pháp liên quan đến một bộ tiền xử lý cho mã nguồn của bạn có thể chấp nhận được không? –

+2

@Thomas, Yahya: Không tin rằng đây là một bản sao, vì không có câu hỏi nào liên quan cụ thể đề cập đến những khó khăn được giới thiệu để làm cho điều này mạnh mẽ chống lại sự xáo trộn mã. –

Trả lời

9

Như đã nêu here:

giá trị Caller Thông tin được phát ra như literals vào ngôn ngữ trung gian (IL) tại thời gian biên dịch. Không giống như kết quả của thuộc tính StackTrace đối với trường hợp ngoại lệ, kết quả không bị ảnh hưởng bởi sự che khuất.

Vì vậy, từ phương pháp của bạn, bạn có thể thử để gọi phương thức sau đây như:

public string GetCaller([System.Runtime.CompilerServices.CallerMemberName] string memberName = "") 
{ 
    return memberName; 
} 
+1

Có, nó đang hoạt động, tôi đã thử giải pháp này nhờ @O. R. Mapper, cảm ơn cả hai vì giải pháp này :) – user2088807

Các vấn đề liên quan