2012-11-28 50 views
5

Tôi có một chức năng mà phải mất một con trỏ hàmCách lấy tên hàm từ con trỏ hàm trong C#?

như

public void myfunc<a,b>(Func<a,b> functionpointer) 
{ 
    String functionname; 
    // Do some magic to get functionpointers name and set it to functionname 
} 

Có thể để có được tên của chức năng mà không cần chạy nó?

Tôi biết rằng bạn có thể lấy tên hàm của chức năng hiện đang chạy, nhưng làm thế nào để bạn có được tên của hàm mà bạn sắp gọi?

Hãy tha thứ cho tôi nếu một câu hỏi như vậy có thể đã được đăng trước đây, tôi không thể tìm ra một giải pháp cho nó trong C#

+1

Lưu ý rằng các chức năng "ẩn danh" có thể cung cấp thông tin hữu ích. Liệu nó có giúp để biết chức năng "tên" cho một cuộc gọi như 'myfunc (x => x.Blah)'? – dlev

Trả lời

7

Bạn có thể sử dụng MemberInfo.Name Property

string functionname = functionpointer.Method.Name; 
+0

Xét về hiệu suất, mức độ ảnh hưởng lớn đến mức nào? Nó nặng không? –

+0

@BrijeshBharadwaj, thuộc tính của hàm 'Func'. Nó sẽ không nặng chút nào, tôi tin. Ngay cả khi có hiệu ứng hiệu suất khi truy cập bộ thu, nó sẽ không đáng kể. – Habib

+0

@BrijeshBharadwaj Tôi nghĩ rằng câu hỏi đầu tiên nên được, hiện điều này trở lại thực sự tên bạn muốn hoặc một tên ngẫu nhiên được tạo ra bởi trình biên dịch. –

0
public void myfunc<a, b>(Expression<Func<a, b>> expr) 
{ 
    Func<a, b> functionpointer = expr.Compile(); 

    String functionname = ""; 
    var mce = expr.Body as MethodCallExpression; 
    if(mce!=null) 
    { 
     functionname = mce.Method.Name; 
    } 
} 
0

Sử dụng Reflection

foreach (Type objType in assembly.GetTypes()) 
       { 
        //List<string> listInner = new List<string>(); 
        var listInner = new HashSet<string>(); 
        listInner.Add(objType.FullName); 
        foreach (MemberInfo obMember in objType.GetMembers()) 
        { 
         listInner.Add(obMember.MemberType + " " + obMember.ToString()); 

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