2012-11-28 26 views
5

मैं एक समारोह जो की तरहसी # में फ़ंक्शन पॉइंटर से फ़ंक्शन नाम कैसे प्राप्त करें?

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

एक समारोह सूचक

लेता है क्या यह संभव है यह चलने के बिना समारोह के नाम प्राप्त करने के लिए है?

मुझे पता है कि आप वर्तमान में चल रहे फ़ंक्शन का फ़ंक्शन नाम प्राप्त कर सकते हैं, लेकिन आप उस फ़ंक्शन का नाम कैसे प्राप्त कर सकते हैं जिसे आप कॉल करने जा रहे हैं?

मुझे माफ कर दो हो सकता है अगर इस तरह के एक सवाल से पहले पोस्ट की है, मैं सी # में इसके लिए एक समाधान

+1

ध्यान दें कि "अज्ञात" फ़ंक्शंस उपयोगी जानकारी दे सकता है। क्या यह 'myfunc (x => x.blah)' जैसे कॉल के लिए फ़ंक्शन "नाम" जानने में मदद करता है? – dlev

उत्तर

7

तुम MemberInfo.Name Property

string functionname = functionpointer.Method.Name; 
+0

प्रदर्शन के मामले में, यह कितना बड़ा हिट होगा? क्या यह भारी है? –

+0

@ ब्रिजेशभारदाज, यह 'Func' समारोह की एक संपत्ति है। यह बिल्कुल भारी नहीं होने वाला है, मुझे विश्वास है। यहां तक ​​कि अगर गेटटर तक पहुंचने पर प्रदर्शन प्रभाव पड़ता है तो यह नगण्य होगा। – Habib

+0

@ ब्रिजेशभारद्वाज मुझे लगता है कि पहला सवाल होना चाहिए, क्या यह वास्तव में वह नाम है जो आप चाहते हैं या संकलक द्वारा उत्पन्न यादृच्छिक नाम। –

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

परावर्तन उपयोग

उपयोग कर सकते हैं नहीं मिल सकता है
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()); 

        } 
       }